3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】メッセージを送ったビューにredirect(メモ)

Last updated at Posted at 2020-05-01

##目的
依頼詳細画面(requests/show.html.erb)からメッセージを送り(message#createして)、依頼詳細画面(requests/show.html.erb)に戻りたい。

##前提
テーブル同士の紐付けができている。

##実装
URIパターンより、
request GET /requests/:id(.:format) requests#show
依頼詳細画面(requests/show)に戻るためには、request.idが必要になる。

以下のようにした。

messages.controller.rb
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 複数形になっていた。単数形にして。エラー解決。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?