Вложенные формы и ассоциации зданий

Я работаю над формой добавления в корзину. Это выглядит примерно так

#Models
Order.rb
  has_many :line_items
  accepts_nested_attributes_for :line_items, :allow_destroy => true

LineItem.rb
  has_one :product
  belongs_to :order

Product.rb
  belongs_to :line_item

Я хотел бы создать форму в product#show, чтобы разрешить одновременное добавление нескольких связанных продуктов в заказ/корзину, в основном создать или обновить позицию для каждого продукта.

Вероятно, что-то вроде этого в представлении (HAML для краткости).

-form_for @order do |f|
 - if has_related?
   - for related in @products.related_products
     - f.field_for :line_item do |li_form|
       = li_form.text_field :quantity
       = li_form.hidden_field :product_id
       = related.product_name

Что нужно, чтобы действительно заставить что-то подобное работать?


person Glenn    schedule 22.12.2010    source источник


Ответы (1)


Мне нужно больше информации, чтобы быть уверенным, но кажется, что LineItem belongs_to :product и Product НЕ должны belong_to :line_item, если только там действительно нет отношения 1-1 (что не имеет смысла для меня и не соответствует обычному соглашению о вот такие системы)

Примечание** Использование - перед form_for и fields_for устарело в rails 3 в пользу =, так как форма действительно отображает HTML

= fields_for :line_items do |li_form| — это синтаксис отношения has_many.

Остальное все зависит от вашего пользовательского дизайна.

Надеюсь это поможет!

person Garrett Lancaster    schedule 22.12.2010
comment
Извините, мои модели немного сложнее, но я попытался упростить вопрос. LineItem действительно принадлежит к продукту, а Product has_many :line_items. Я работаю с рельсами 2.3.10. Есть мысли о том, как создать новую ассоциацию line_item для каждого продукта в @product.related_products? - person Glenn; 23.12.2010
comment
В контроллере установите связанные, а затем создайте позиции: related.each{|r| @order.line_items.build(:quantity => 0, :product_id => r.id) - person Garrett Lancaster; 23.12.2010
comment
Именно то, что я искал. Спасибо! - person Glenn; 25.12.2010