前提・実現したいこと
チャットアプリの作成を行っていたらエラーが発生しました。下記のHTMLのform_withの行です。messagesのルーティングがroomsにネストしているため、引数に@room,@messagesの2つを渡しています。
form_withのmodelオプションに記述した@roomには「指定のチャットルームのレコード情報」、@messageには「Messageモデルのからのインスタンス(Message.new)」がコントローラーで定義されています。
###NoMethodError in Messages#index
NoMethodError in Messages#index Showing /Users/tsukadataison/projects/chat-app/app/views/messages/_main_chat.html.erb where line #28 raised: undefined method `to_model' for #<ActiveRecord::AssociationRelation []> Did you mean? to_xml
html
1<%= form_with model: [@room,@messages], class: 'form', local: true do |f| %> 2 <div class="form-input"> 3 <%= f.text_field :content, class: 'form-message', placeholder: 'type a message' %> 4 <label class="form-image"> 5 <span class="image-file">画像</span> 6 <%= f.file_field :image, class: 'hidden' %> 7 </label> 8 </div> 9 <%= f.submit '送信', class: 'form-submit' %> 10<% end %>
messages_controllerの記述は
ruby
1class MessagesController < ApplicationController 2 def index 3 @message = Message.new 4 @room= Room.find(params[:room_id]) 5 @messages = @room.messages.includes(:user) 6 end 7 8 def create 9 @room = Room.find(params[:room_id]) 10 @message = @room.messages.new(message_params) 11 if @message.save 12 redirect_to room_messages_path(@room) 13 else 14 @messages = @room.messages.includes(:user) 15 render :index 16 end 17 end 18 19 private 20 def message_params 21 params.require(:message).permit(:content).merge(user_id: current_user.id) 22 end 23end 24
ルーティングは
ruby
1Rails.application.routes.draw do 2 devise_for :users 3 get 'messages/index' 4 root to: "rooms#index" 5 resources :users, only: [:edit, :update] 6 resources :rooms, only: [:new, :create] do 7 resources :messages, only: [:index, :create] 8 end 9end 10 11
試したこと
おそらくform_withのモデルを指定した部分だと思うのですが、ちゃんとコントローラーで定義しているのでなぜエラーが出るかわかりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/17 09:13