質問お願いします。
投稿formでformwithとfields_forを使い、messageモデルとshopモデルを入れてdbを分けている状況です。
そこでユーザーが投稿した内容をmessageモデル、shopモデル1件づつ取得し、showページに一つずつ表示させるような実装を考えております。
以前こちらでアドバイスをいただき、messagescontrollerのnewアクションのコードを書き直してみましたが、またエラーになってしまいました。viewからshop.idの送り方がわかりませんでした。
rails初心者で、わかりやすく教えて頂けたら幸いです。よろしくお願いします。
shop.rb
class Shop < ApplicationRecord
geocoded_by :address
after_validation :geocode, if: :address_changed?
has_many :messages
belongs_to :user, optional: true
geocoded_by :address
after_validation :geocode
end
user.rb
class User < ApplicationRecord
Include default devise modules. Others available are:
:confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :messages
end
messages.controller
class MessagesController < ApplicationController
before_action :move_to_index, except: :index
def index
@messages = Message.order("created_at DESC").page(params[:page]).per(6)
respond_to do |format| format.html format.js end
end
def new
@shop = Shop.find(params[:id])
@message = @shop.messages.build
end
def create
@messages = Message.new(messages_params)
@messages.save
end
def show
@nickname = current_user.nickname
@messages = Message.find(params[:id])
end
def destroy
message = messages.find(params[:shop_id])
message.destroy if message.user_id == current_user.id
end
def edit
@messages = Message.find(params[:id])
end
def update
message = Message.find(params[:id])
if message.user_id == current_user.id
message.update(messages_params)
end
end
private
def messages_params
params.require(:message).permit(:text, :image, shop_attributes:[:name, :address, :latitude, :longitude, :message_id ])
end
def move_to_index
redirect_to action: :index unless user_signed_in?
end
end
あなたの回答
tips
プレビュー