has_many: через вложенную_форму, которая может создавать несколько экземпляров

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

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?

УПД. Я нашел потрясающую жемчужину от 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

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


person Petya petrov    schedule 21.04.2011    source источник
comment
accepts_nested_attributes_for обычно используется для ассоциации has_many, а не полиморфной ассоциации.   -  person thenengah    schedule 21.04.2011
comment
Будут ли farm_products специфичны для ферм? Я имею в виду, будут ли farm_products общими, такими как теги, по которым разные фермы захотят делиться ими?   -  person thenengah    schedule 21.04.2011
comment
farm_products содержит farm_id, product_id, цену. А таблица продуктов — это своего рода статическая коллекция продуктов. На всех фермах одинаковые продукты, но цена разная.   -  person Petya petrov    schedule 21.04.2011


Ответы (1)


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

person smathy    schedule 21.04.2011