.save

セーブがしたいんです…

レビュー反省 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について

コミットのメッセージで迷うから。

detail.chiebukuro.yahoo.co.jp

 

・リダイレクトの際に、いちいち変数で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])

 

こうする。