初めまして。ruby初心者です。
以下の2つのテーブルをひも付けたいと考えていますが、子テーブルに親のIDが参照できず困っています。
皆様のお力を貸してくださいm(_ _)m
・お店(親)
・メニュー(子)
お店は複数のメニューを持つことができる。(1対多の関係)
お店の詳細ページがあり、そこに「メニュー作成」リンクを実装。
「メニュー作成」をクリックすると新規作成ページに遷移。
■テーブル定義は以下とします。
shopsテーブル(親)
id:integer #主キー:ID
name:string #お店の名前
menusテーブル(子)
id:integer #主キー:ID
shop_id:integer #外部キー:shopsテーブルのID
name:string #メニュー名称
price:integer #価格
■shopとmenuを関連づけ
shopのモデルに以下を追記
has_many :menus, dependent: :destroy
menuのモデルに以下を追記
belongs_to :shop
■shopのviewに以下のリンクを張ります。(show.html.erb)
<%= link_to 'メニュー作成', new_menu_path(shop_id: @shop) %>
■menuコントローラーの修正
menu_controller.rb
def create
@menu = Menu.new(shop_id: @shop.id)
@menu.shop_id = @shop.id
respond_to do |format|
if @menu.save
redirect_to @menu, notice: "メニュー作成完了"
else
render action: "new"
end
end
end
これでメニューを作成すると以下のエラーが表示されてしまいます。
shopのidが参照されていないみたいなのですが、どのようにテーブルに反映させたら良いかがわかりません。
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
初心者で相当基本的な質問で申し訳ないですが、何卒よろしくお願い致します。
