##目的
依頼詳細画面(requests/show.html.erb)からメッセージを送り(message#createして)、依頼詳細画面(requests/show.html.erb)に戻りたい。
##前提
テーブル同士の紐付けができている。
##実装
URIパターンより、
request GET /requests/:id(.:format) requests#show
依頼詳細画面(requests/show)に戻るためには、request.idが必要になる。
以下のようにした。
def create
message = Message.create(message_params) #変数messageを定義
redirect_to "/requests/#{message.request.id}" #アソシエーションを利用し、request.idを取得
end
private
def message_params
params.require(:message).permit(:content).merge(user_id: current_user.id, request_id: params[:request_id])
end
変数messageを定義することで、ストロングパラメーターを用いてrequest.idが取得できる。
requestとmessageは紐づいているため、#{message.request.id}
でidを取得。
##実装で起こったエラー
メッセージを送信後、正常にredirectされているが、投稿されたメッセージは表示されない。
ターミナルを確認。以下。
Started POST "/requests/8/messages" for ::1 at 2020-05-01 15:07:23 +0900
Processing by MessagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"+IWNPAmRagwZuuL〜4uDd4yYJWeFcO==", "message"=>{"content"=>"s"}, "commit"=>"SEND", "request_id"=>"8"}
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
↳ app/controllers/messages_controller.rb:9
(0.2ms) BEGIN
↳ app/controllers/messages_controller.rb:3
Request Load (0.5ms) SELECT `requests`.* FROM `requests` WHERE `requests`.`id` = 8 LIMIT 1
↳ app/controllers/messages_controller.rb:3
(0.3ms) ROLLBACK
↳ app/controllers/messages_controller.rb:3
Redirected to http://localhost:3000/requests/8
Completed 302 Found in 23ms (ActiveRecord: 1.4ms)
ROLLBACK!?!?
DBには保存されていない。
BEGIN と ROLLBACK はデータベースの用語らしい。
保存しようとしたけど取り消された感じ?
modelを確認belongs_to :users
複数形になっていた。単数形にして。エラー解決。