##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'