質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

862閲覧

rails メッセージ 編集機能

yamadaippei

総合スコア12

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/04/02 06:57

前提・実現したいこと

、、、
チャットのやり取りができるアプリの制作をしています。
自分の送ったチャットのみ編集消去ができるようにしたいのですが、
うまくいきません。
アドバイスお願いします。
、、、

発生している問題・エラーメッセージ

param is missing or the value is empty: message

該当のソースコード

rails

1 2messages_controller 3 4class MessagesController < ApplicationController 5 before_action :set_group 6 7 def index 8 @message = Message.new 9 @messages = @group.messages.includes(:user) 10 end 11 12 def create 13 @message = @group.messages.new(message_params) 14 if @message.save 15 redirect_to group_messages_path(@group), notice: 'メッセージが送信されました' 16 else 17 @messages = @group.messages.includes(:user) 18 flash.now[:alert] = 'メッセージを入力してください' 19 render :index 20 end 21 end 22 23 def edit 24 @message = Message.find(params[:id]) 25 end 26 27 def update 28 @message = current_user.messages.find(params[:id]) 29 @message.update(message_params) 30 redirect_to group_messages_path(@group), notice:"メッセージを編集しました" 31 end 32 33 def destroy 34 @message = current_user.messages.find(params[:id]) 35 @message.destroy(message_params) 36 redirect_to group_messages_path(@group), notice:"投稿を削除しました。" 37 end 38 39 private 40 41 def message_params 42 params.require(:message).permit(:content, :image).merge(user_id: current_user.id) 43 end 44 45表示されるメッセージのhaml 46 47.message 48 .upper-message 49 .upper-message__user-name 50 = message.user.name 51 .upper-message__date 52 = message.created_at.strftime("%Y年%m月%d日 %H時%M分") 53 .lower-message 54 - if message.content.present? 55 %p.lower-message__content 56 = message.content 57 = image_tag message.image.url, class: 'lower-message__image' if message.image.present? 58 59 60 = form_for [@group, @message] do 61 = label_tag "編集する" 62 = text_field :content, placeholder: 'type a message' 63 .form__mask 64 = label :image, class: 'form__mask__image' do 65 = icon('fas', 'image', class: 'icon') 66 = file_field :image, class: 'hidden' 67 = submit_tag

試したこと

message_paramがないということで
@message.update(message_params)など持たせようと思ったのですが
ダメでした。
初心者で勉強中です。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.k

2020/04/02 07:17 編集

params のログを追記できますか?
yamadaippei

2020/04/02 07:30

https://gyazo.com/da80c421d5b91617fefd9916951b502d こちたでよろしいでしょうか? 今現在messages/indexにてメッセージの送信ができるのですが 今まで学習してきた編集のやり方だと編集ページにとび 編集できるうにしていたのですが = link_to "編集", edit_message_path(@message.id)で edit.html.hamlに移動する事ができませんでした。 なのでindexのページのまま編集できるようにしようと思ったのですが、 messageのcreateアクションが動いて普通にメッセージが送信されてしまいます。。。
s.k

2020/04/02 07:35

まずやりたいことは、一覧ページでメッセージを削除することでいいんでしたよね?
yamadaippei

2020/04/02 07:38

一覧ページにてメッセージの編集です。 もしくは、編集ページに移動しての編集です。 消去もこの後に調べて機能追加しようと考えています。
yamadaippei

2020/04/02 07:41

messagesのコントローラーがこのような感じで https://gyazo.com/e2d4b1b51a6d18c18130ee2b1d380b1a メッセージの送信と表示ができているのですが、 そのメッセージそれぞれにまたformを追記してupdateしたいのですが そのまま新しいメッセージが送られるというのが現状です。
guest

回答2

0

ベストアンサー

ループでメッセージを表示して、そのメッセージそれぞれにフォームを用意しているということですが、
ループ処理された message ではなく @message が使われているのが新規で作成されてしまう原因だと思います。

@ を外してください。

ruby

1 = form_for [@group, message] do 2 = label_tag "編集する" 3 = text_field :content, placeholder: 'type a message' 4 .form__mask 5 = label :image, class: 'form__mask__image' do 6 = icon('fas', 'image', class: 'icon') 7 = file_field :image, class: 'hidden' 8 = submit_tag

投稿2020/04/02 07:49

s.k

総合スコア423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamadaippei

2020/04/02 07:59

こちら返信ありがとうございます。 こちらアドバイスのように記述変更すると 編集するform内に元のメッセージの情報を表示して内容の書き換えができるようになりました。 エラー画面 https://gyazo.com/08e84a47ead01c7eeaf7ddc88499c5c8 routes.rb https://gyazo.com/f573e807862b6bf831a326b67bf6fc5b その後このようなエラーになるのですが、よければ解決の考え方を教えてもらえますでしょうか?
s.k

2020/04/02 08:06

post は create で put が update です。
yamadaippei

2020/04/02 08:14

なるほど! 今メソッドのpostとputの使い方がいまいち分からなく調べて、 method: :putとする事でメッセージの編集できるようになりました。 本当にありがとうございます!
guest

0

これで削除できると思います。
message_params は必要ないです。

ruby

1 def destroy 2 @message = current_user.messages.find(params[:id]) 3 @message.destroy 4 redirect_to group_messages_path(@group), notice:"投稿を削除しました。" 5 end

投稿2020/04/02 07:37

s.k

総合スコア423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamadaippei

2020/04/02 08:09

消去ボタンの追加にも答えてくださってありがとうございます。 コントローラーの記述は変更しました。 その後消去ボタンの追加をしたのですがやはり自分で試しに書いた時のように messageのiodが取れませんでした。 こちらの返信もよければお願いいたします。 エラー画面 https://gyazo.com/4eb979d24a3b59249167d6cab6430f33
s.k

2020/04/02 08:30

`@` を外すんです。
yamadaippei

2020/04/02 09:11

返信ありがとうございます。 返信していただいたこと変更してもエラーが解決せず自分のコードの間違っっている部分を調べて考えていました。 今コードを変更した状態でもう少しのところだと思うのですが、 まだ回答いただけるのであればお願いできないでしょうか。 なんどもすみません。 エラー画面 https://gyazo.com/de6249519eb08f9f3e690a169ba5612a 書き換えたコントローラー https://gyazo.com/4a33def14550774a525f4a1589866307 haml https://gyazo.com/d278a64d54184a2af3105cc0189ecc5b なんども返信いただいているのに解決できなくてほんとすみません。
s.k

2020/04/02 09:20

ここらへんは別の質問で対応するので、質問を新たに作成してコメントにURLを貼ってください。 あとgyazo使うのは構わないのですが、コードをコピーしたり確認するとき別ページにいかなければならないのでなるべく質問に書きましょう。それと、この質問自体に対しては回答出てるのでベストアンサーをお願いします。一つの質問に対して、答えられるだけ答えさせたい気持ちはわからなくもないですが、回答者の気持ちを考えていただきたいのと質問1つに複数の問題を持ち込むのは避けた方がいいです。検索に引っかかった時にこの質問では何をしてるのか閲覧者がよくわからなくなってしまいます。
yamadaippei

2020/04/02 09:26

了解しました。 始めたばかりで基本的な使い方がわかっていませんでした。 申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問