LoginSignup
3
1

More than 3 years have passed since last update.

応用カリキュラム 09

Posted at

renderメソッドをコントローラーで使う

renderを分かりやすくまとめてくれてる

ビューで使う場合と、コントローラで使う場合で動きが違うっぽい。
ビューで使う場合は(主に?)部分テンプレートとして使う。

 <%# _tweet.html.erbファイルをテンプレートとして使う場合 %>
<%= render partial: tweet %>

となるが、
コントローラの場合は、特定のアクションのビューを呼び出す。

render action: :new <%# 同じコントローラ内のnewアクションのビューを呼び出す %>
render template: "review/new" <%# 違うコントローラ内のnewアクションのビューを呼び出す %>

redirect_toと比較して、HTTPリクエストを送らない、のが特徴らしい。

モデルインスタンス.users << current_user で特定のグループのユーザー集合にログインユーザーを追加

モデルインスタンス.save データ保存が成功したか否かを返すメソッド

「if (last_message = messages.last).present?」と記述することで、最新のメッセージを変数last_messageに代入しつつ、メッセージが保存されているかどうかで場合分けを行なう。

if文を省略して1行に書く書き方を三項演算子と呼ぶ

 条件式 ? trueの時の処理 : falseの時の処理

railsにおけるDBの値の表示

まず、DBの値にアクセスするには、コントローラかモデルでインスタンス変数を定義しておく必要がある、と自分は思い込んでいた。

ユーザー管理が必要なサービスでdeviseを適用しているならば、コントローラでのインスタンス変数定義より先にdeviseに関係するインスタンス変数とかローカル変数が定義されており、そのdeviseの変数を介してテーブル(モデル定義時にdeviseオプションをつけたテーブル)にアクセスすることが可能。
更にテーブル(モデル)同士のアソシエーションを繋いで定義しているならば、コントローラでインスタンス変数を定義せずとも、deviseの変数を介してテーブルを参照することができる。current_user.group.messageみたいな表示ができる。

current_user.groups
current_user : device経由でuserモデルを定義した時に、userテーブルと紐づいたインスタンスがcurrent_userをはじめその他の変数に定義されてる
.groups : usersテーブルからアソシエーション定義によって紐づいたgroupsテーブルの情報を取得することができる。

覚えたいことは、ビューで変数を参照したい場合でも必ずしもコントローラでインスタンス変数の定義をする必要はない、ということ。

HTTPリクエストからのルーティング⇨コントローラ⇨ビューについて

アクションに対応するレスポンスとして、ビューを表示するのみ、であったなら
コントローラにアクションメソッドを定義する必要がない。(ちゃんとビューファイルを用意しておけば)ルーティング⇨(コントローラ飛ばして)ビュー、となる。

indexアクションへオプション(通知用メッセージ)付きでリダイレクト

redirect_to ({:action => 'index'}), :notice => 'message'

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1