#renderとredirect_to
###redirect_to
指定したcontroller、actionに再度リクエストを送信
controllerのインスタンス変数は、リダイレクト先で新たに生成
###render
controllerで処理した結果の出力先Viewを指定する
controllerのインスタンス変数は、そのままViewに渡される
基本的に、
データを追加、更新、削除を行う時は「redirect_to」
データの取得を行う時は「render」
def index
@message = Message.new
end
def create
@message = current_user.messages.new(message_params)
if @message.save
redirect_to :index
else
flash[:alert] = "メッセージを入力してください。"
render action: :index
end
end
メッセージボタンを押すとフォームに入力されたメッセージが送信される時の処理。
メッセージの保存に成功すれば、redirect_toにより、indexアクションのリクエストが再度送信されるため、メッセージは正しく表示される。
例えば、ここがrenderだった場合、メッセージの保存は成功するが、正しく表示されない。
#参考記事
http://ruby-rails.hatenadiary.com/entry/20140808/1407427457
http://avosalmon.hatenablog.com/entry/2014/05/17/%E3%80%90Rails%E3%80%91render%E3%81%A8redirect_to%E3%81%AE%E9%81%95%E3%81%84