irb(main):001:0> hotel=Hotel.find(1)
←[1m←[36mHotel Load (1.0ms)←[0m ←[1mSELECT `hotels`.* FROM `hotels` WHERE `hotels`.`hotel_Id` = 1 LIMIT 1←[0m
=> #<Hotel hotel_Id: 1, hotel_Name: "Hotel Swosti", hotel_address: nil, hotel_location: "Bhubaneswar", hotel_contactNo: nil, crea
ted_at: nil, updated_at: nil>
irb(main):002:0> hotel.menus
←[1m←[35mMenu Load (1.0ms)←[0m SELECT `menus`.* FROM `menus` WHERE `menus`.`hotel_id` = 1
=> #<ActiveRecord::Associations::CollectionProxy []>
irb(main):003:0> first_menu=Menu.new(:menu_item_name=>'Rajma',:price=>30,:item_type=>'Half')
=> #<Menu hotel_Id: nil, menu_item_id: nil, menu_item_name: "Rajma", price: 30, item_type: "Half", created_at: nil, updated_at: n
il>
irb(main):004:0> first_menu.hotel
=> nil
irb(main):005:0> hotel.menus=first_menu
NoMethodError: undefined method `each' for #<Menu:0x512be78>
迁移: create_table:menus,:id =&gt; false do | t | t.integer&#39; hotel_Id&#39; t.primary_key&#39; menu_item_id&#39; t.string&#39; menu_item_name&#39; t.integer&#39;价格&#39; t.string&#39; item_type&#39;
end
add_index("menus","hotel_Id")
端 端
答案 0 :(得分:4)
如果您要将first_menu
添加到hotel.menus
关联,则应执行以下操作:
hotel.menus << first_menu
发生错误是因为Hotel#menus=
setter期望收集Menu
个对象作为参数。
答案 1 :(得分:0)
hotel.menus
是一种关系。您使用的关联会返回一系列酒店菜单。
要获得第一个成员,只需一个菜单,您可以使用hotel.menus.first
。
如果您想为酒店创建一个新菜单,您可能会更好地使用:
hotel.menus.build(menu_item_name: 'Rajma', price: 30, item_type: 'Half')
hotel.save!
或create
表单 - 取决于您在保存之前要对酒店或菜单执行的操作。