【问题标题】:Nested Forms and Building associations嵌套表单和构建关联
【发布时间】:2010-12-22 02:21:22
【问题描述】:

我正在处理添加到购物车的表单。它看起来像这样

#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

真正实现这样的工作需要什么?

【问题讨论】:

    标签: ruby-on-rails forms nested-forms


    【解决方案1】:

    我需要更多信息才能确定,但​​似乎 LineItem belongs_to :product 和 Product 不应该 belong_to :line_item 除非那里确实存在 1-1 关系(这对我来说没有意义,并且不'不遵循这些系统的正常约定)

    注意** 在 form_forfields_for 之前使用 -rails 3 中已弃用,而改用 =,因为表单确实会呈现html

    = fields_for :line_items do |li_form| 是 has_many 关系的语法

    其余的都取决于您的用户体验设计。

    希望这会有所帮助!

    【讨论】:

    • 对不起,我的模型有点复杂,但我试图简化这个问题。 LineItem 实际上是belong_to Product 和Product has_many :line_items。我正在使用 Rails 2.3.10。关于如何为@product.related_products 中的每个产品创建新的 line_item 关联有什么想法吗?
    • 在您的控制器中,设置相关然后构建行项目:related.each{|r| @order.line_items.build(:quantity => 0, :product_id => r.id)
    • 正是我想要的。谢谢!
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多