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

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

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

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

Q&A

0回答

207閲覧

[Rails]each文内での削除・編集・コメント機能の実装

YuriKosaki

総合スコア6

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/03/25 13:14

前提・実現したいこと

グループに紐づいたメッセージが出力される機能です。
グループで紐づいたメッセージをeach文で取り出し、一つ一つのメッセージに
編集・削除・コメント機能を実装したいのですが、message自身のidが取り出せなくて、実装できないです。
誰か実装できる方がいれば教えて欲しいです。

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

ruby

1ActiveRecord::RecordNotFound in MessagesController#index 2Couldn't find Message with 'id'=

該当のソースコード

model/group.rb

ruby

1has_many :users, through: :members 2has_many :messages, dependent: :destroy 3has_many :members

model/message.rb

ruby

1belongs_to :group 2belongs_to :user

Controller/messagescontroller.rb

ruby

1class MessagesController < ApplicationController 2 3 4 def index 5 @group = Group.find(params[:group_id]) 6 @users = User.order("created_at ASC") 7 @groups = Group.order("created_at ASC") 8 @message = Message.new 9 @rooms = Room.order("created_at ASC") 10 11 12 respond_to do |format| 13 format.html 14 format.json 15 end 16 end 17 18 def create 19 @group_message = Message.new(message_params) 20 @group = Group.find(params[:group_id]) 21 22 if @group_message.save 23 respond_to do |format| 24 format.html { redirect_to :group_messages, notice: "メッセージを更新しました。" } 25 format.json 26 end 27 else 28 render :index 29 end 30 end 31 32 33 def edit 34 @message = Message.find(params[:id]) 35 end 36 37 def update 38 @message = Message.find(params[:id]) 39 40 if @message.update 41 redirect_to group_messages_path 42 end 43 end 44 45 def destroy 46 @message = Message.find(params[:id]) 47 @message.destroy 48 redirect_to group_messages_path 49 end 50 51 private 52 def message_params 53 params.require(:message).permit(:text, :image).merge(group_id: params[:group_id], user_id: current_user.id) 54 end 55end

views/message/index.html.haml

ruby

1.content.clearfix 2 = render partial: 'module/sidemenu', locals: {groups: @groups, rooms: @rooms} 3 .right_content 4 .group_name.clearfix 5 = link_to group_path(@group) do 6 %span 7 = @group.name 8 = link_to group_path(@group), method: :delete do 9 %i.fa.fa-sign-out{"aria-hidden" => "true"} 10 = link_to edit_group_path(@group) do 11 %i.fa.fa-pencil-square-o{"aria-hidden" => "true"} 12 %i.fa.fa-cog{"aria-hidden" => "true"} 13 .chat_view 14 #message-field 15 = render partial: 'message', locals: {group: @group, mes: @one_message} 16 .form_view.clearfix 17 = form_for([@group, @message]) do |f| 18 = f.text_field :text, class: "form-field", placeholder: "テキストを入力してください" 19 = f.label :image, class: "image-label" do 20 %i.fa.fa-picture-o{"aria-hidden" => "true"} 21 = button_tag type: "submit", id: "message-submit-btn", data: {disable_with: false } do 22 %i.fa.fa-paper-plane{"aria-hidden" => "true"} 23

views/message/_message.html.haml

ruby

1- group.messages.each do |message| 2 .chat.clearfix{ "data-message-id": "#{message.id}"} 3 %span 4 = message.user.name 5 %p 6 = message.created_at.strftime("%Y/%m/%d %H:%M:%S") 7 = link_to group_messages_path(mes), method: :delete do 8 %i.fa.fa-times{"aria-hidden" => "true"} 9 %i.fa.fa-pencil-square-o{"aria-hidden" => "true"} 10 %i.fa.fa-reply{"aria-hidden" => "true"} 11 %h5 12 = message.text

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問