前提・実現したいこと
rails初心者です。
投稿formでformwithとfields_forを使い、messageモデルとshopモデルを入れてdbを分けている状況です。
そこでユーザーが投稿した内容をmessageモデル、shopモデル揃えてshowページに1件づつ取得し、表示させるような実装を考えております。messageは1件づつ表示させているのですが、そこにshopモデルの内容をどうやって紐づけるのかわかりませんでした。
発生している問題・エラーメッセージ
NoMethodError in MessagesController#new
マイグレーション
lang
1class CreateShops < ActiveRecord::Migration[5.2] 2 def change 3 create_table :shops do |t| 4 t.string "name" 5 t.string "prefecture" 6 t.string "address_city" 7 t.string "address_street" 8 t.string "address" 9 t.float "latitude" 10 t.float "longitude" 11 t.references :user, foreign_key: true 12 t.timestamps 13 end 14 end 15end
マイグレーション
lang
1class CreateMessages < ActiveRecord::Migration[5.2] 2 def change 3 create_table :messages do |t| 4 t.string :name 5 t.text :text 6 t.string :image 7 t.timestamps null: true 8 end 9 end 10end
message.rb
lang
1class Message < ApplicationRecord 2 mount_uploader :image, ImageUploader 3 belongs_to :user, optional: true 4 belongs_to :shop, optional: true 5 6 accepts_nested_attributes_for :shop 7 has_many :likes, dependent: :destroy 8 9 def like_user(user_id) 10 likes.find_by(user_id: user_id) 11 end 12 13end 14
user.rb
lang
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 has_many :messages 7end
shop.rb
lang
1class Shop < ApplicationRecord 2 geocoded_by :address 3 after_validation :geocode, if: :address_changed? 4 has_many :messages 5 belongs_to :user, optional: true 6 geocoded_by :address 7 after_validation :geocode 8end
message.controller
lang
1class MessagesController < ApplicationController 2 3 before_action :move_to_index, except: :index 4 5 def index 6 @messages = Message.order("created_at DESC").page(params[:page]).per(6) 7 8 respond_to do |format| 9 format.html 10 format.js 11 end 12 end 13 14 def new 15 @messages = Message.new 16 @messages = @messages.shop.build 17 end 18 19 def create 20 @messages = Message.new(messages_params) 21 @messages.save 22 end 23 24 25 def show 26 @nickname = current_user.nickname 27 @messages = Message.find(params[:id]) 28 end 29 30 31 def destroy 32 message = messages.find(params[:id]) 33 message.destroy if message.user_id == current_user.id 34 end 35 36 def edit 37 @messages = Message.find(params[:id]) 38 end 39 40 def update 41 message = Message.find(params[:id]) 42 if message.user_id == current_user.id 43 message.update(messages_params) 44 end 45 end 46 47 private 48 49 def messages_params 50 params.require(:message).permit(:text, :image, shop_attributes:[:name, :address, :latitude, :longitude, :message_id ]) 51 end 52 53 54 def move_to_index 55 redirect_to action: :index unless user_signed_in? 56 end 57 58end 59
試したこと
shopモデルのマイグレーションファイルにmessage_idを追加し、ストロングパラメータにもmessage_idを追加しましたが、dbに反映されなかったです。
外部キーreferences型で試してみましたが、user_idは反映されましたが。message_idは反映されなかったです。
完全に見当違いかもしれませんが、アドバイスよろしくお願いします。。。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/09 13:26
2020/01/09 14:02