has_many: через nested_form, который может создавать несколько экземпляров

#jquery #ruby-on-rails #ruby-on-rails-3 #many-to-many #nested-forms

#jquery #ruby-on-rails #ruby-on-rails-3 #многие ко многим #вложенные формы

Вопрос:

У меня есть следующий код в моих моделях:

 Class Farm < ActiveRecord::Base
  has_many :farm_products, :dependent => :destroy
  has_many :products, :through => :farm_products
  accepts_nested_attributes_for :farm_products
end

class Product < ActiveRecord::Base
  has_many :farm_products, :dependent => :destroy
  has_many :farms, :through => :farm_products
end

class FarmProduct < ActiveRecord::Base
  belongs_to :farm
  belongs_to :product
end
  

У меня есть форма для создания новой фермы, и я хочу создать farm_products вместе с этой формой. Моя таблица farm_products может содержать не только поля внешнего ключа. Как я могу добавлять или удалять вложенные столбцы с помощью Javascript и / или jQuery?

UPD. Я нашел потрясающую жемчужину от nested_forms, которая делает именно то, что я хочу! Вот код, на мой взгляд

 = nested_form_for @farm, :html => { :multipart => true } do |f|
  = f.fields_for :farm_products do |fp|
-#fields goes here
     = fp.link_to_remove 'Remove this task'
     = fp.link_to_add "Add a task", :farm_products
  

Но получил сообщение об ошибке, в котором говорится

 undefined method `klass' for nil:NilClass
  

Вероятно, что-то не так с моими отношениями, но я не могу найти проблему.

Комментарии:

1. accepts_nested_attributes_for обычно используется для has_many ассоциации, а не полиморфной ассоциации.

2. Будут ли farm_products специфичными для ферм? Я имею в виду, будут ли farm_products общими, такими как теги, в которых разные фермы захотят поделиться ими?

3. farm_products содержит farm_id, product_id, price. А таблица продуктов — это своего рода статическая коллекция продуктов. Все фермы имеют одинаковые продукты, но цена разная.

Ответ №1:

link_to_add Должен находиться за пределами fields_for блока, вызываться для f объекта, а не для fp объекта.