Что я хотел бы сделать, так это сохранить shop_id
в модели Item
.Rails: Как сохранить родительское значение ассоциации
Мои модели следующие:
модели
shop.rb
class Shop < ActiveRecord::Base
belongs_to :order
has_many :items
has_many :categories
end
item.rb
class Item < ActiveRecord::Base
belongs_to :shop
has_many :categories
end
схема
ActiveRecord::Schema.define(version: 20160615060137) do
...
create_table "shops", force: :cascade do |t|
t.string "name"
t.integer "order_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "items", force: :cascade do |t|
t.string "name"
t.integer "shop_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
...
end
Как я могу создать контроллер new
и create
для сохранения shop_id
в items
? Я могу получить такой параметр, как Shop.find_by(id: params[:shop_id])
Было бы полезно, если бы вы могли дать мне какое-либо предложение.
UPDATE
Когда я пытаюсь @ ответ Саада, в NoMethodError
был показан ниже.
NoMethodError (undefined method `to_key' for #<Item::ActiveRecord_Associations_CollectionProxy:0x007f901e079a30>
Did you mean? to_query
to_ary):
app/views/items/new.html.erb:4:in `_app_views_items_new_html_erb__3601549985910054210_70128472136980'
NoMethodError (undefined method `to_key' for #<Item::ActiveRecord_Associations_CollectionProxy:0x007f901e079a30>
Did you mean? to_query
to_ary):
app/views/items/new.html.erb:4:in `_app_views_items_new_html_erb__3601549985910054210_70128472136980'
линии new.html.erb: 4 выглядит следующим образом (я не использую частичного _form.html.erb
до сих пор);
<%= form_for(@item, url: shop_items_path, method: :post) do |f| %>
UPDATE2
routes.rb
, как показано ниже.
routes.rb
Rails.application.routes.draw do
...
resources :items, only: [:new, :create, :edit, :update]
resources :shops do
resources :items
end
...
Спасибо за ваш ответ @DennisCastro. При попытке вашего кода отобразилась следующая ошибка. 'ActiveRecord :: RecordNotFound (не удалось найти Shop без ID): app/controllers/item_controller.rb: 38: in 'load_shop''. Было бы хорошо, если бы вы могли дать мне какое-либо предложение. – SamuraiBlue
Как я сказал.Я думаю, что вы используете вложенные контроллеры, вставьте свой маршрут – DennisCastro
Благодарим вас за комментарий @DennisCastro. Я добавил 'routes.rb' в нижней части моего вопроса. – SamuraiBlue