レビュー反省 2016 12 20
・permitでuser_id、group_idを許すのか、mergeでuser_id、group_idを加えるのかどちらかにしましょう。
params.require(:message).permit(:message, :user_id, :group_id).merge(user_id: current_user.id, group_id: params[:group_id])
・elseの後、改行しましょう
if @message.save!
redirect_to group_path(@group)
else
redirect_to :back, alert: 'メッセージを入力してください'
こうするといい。
・save!は保存に失敗したときに例外を発生させます。単純にfalseが返ってきて欲しい時はsaveを使いましょう
・現在はchatの画面をgroups_cpntrollerのshowで実装していると思います。しかし、chat画面はmessageの一覧が表示されていると考えてmessages_controllerのindexを使って実装する方が良いかなと思います。
ルーティングでmessageをネストしているのでmessages_controllerでもgroup_idを使うことができます。そのgroup_idを使ってグループを取得し、関連付けられたメッセージを一覧で表示してみましょう。
messageコントローラにて、投稿されたmessageの表示を行うようにする。
やり方
1、messageコントローラにindexアクションを作る。
2、中身を作る。役割は以下のとおり。
def index
@group = Group.find(params[:group_id]) #グループのページにアクセスした時に、そのグループの番号を受け取る
@messages = @group.messages #上で受け取ったグループの番号に関連したmessageテーブルの値を取得する
@message = Message.new #form_forに入力される値を受け取るための箱を用意する
end
3、viewをmessagesフォルダに作る。viewで使っている変数で変える必要がある部分は変える。
・changeについて
コミットのメッセージで迷うから。
・リダイレクトの際に、いちいち変数でgroup_idを取得して飛ばす必要はない。
def create
message = Message.new(create_params)
group_id = params[:group_id] #リダイレクトをするために、現在のページのgroup_idを取得する
if message.save
redirect_to group_messages_path(group_id)
これを・・・・・・・・・
redirect_to group_messages_path(params[:group_id])
こうする。