Rails,嵌套属性,在新操作中创建,

时间:2013-09-15 15:34:21

标签: ruby-on-rails ruby-on-rails-4 nested-forms simple-form nested-attributes

我有一个订单系统,用户可以选择要保存在Cookie中的产品。然后,当继续到订单页面时,系统会检索它。

@order = Order.new
unless @cart.nil?
  @cart.each do | product |
    @order.quantities.build :product => product, :quantity => 1
  end
end

但是,我希望用户能够更新数量模型中属于产品和订单的数量。

如何在表格视图中访问这个新制作的“@ order.quantities”?

    <%= simple_form_for(@order) do |f| %>
    <%= f.error_notification %>
    <%= f.simple_fields_for :quantities do |q| %>
       <%= q.input :quantity %>
    <% end %>
    <div class="form-actions">
        <%= f.button :submit, :class => "main_button right" %>
            </div>
        </div>
    <% end %>

型号:

class Order < ActiveRecord::Base
    has_many :quantities
    has_many :products, through: :quantities
end

class Quantity < ActiveRecord::Base
    belongs_to :order, dependent: :destroy
    belongs_to :product
end

1 个答案:

答案 0 :(得分:2)

我认为您需要f.object这会返回一个用于构建表单的对象(在您的情况下,它等于@order

如果您想使用嵌套表单(使用accept_nested_attributes),则需要simple-fields-for。不要忘记将 accepts_nested_attributes_for :quantities 添加到Order.rb。这样的事情应该有效

<%= simple_form_for(@order) do |f| %>
  <%= f.simple_fields_for :quantities do |q| %>
    <%= q.input :quantity %>
    ...

如果您只想打印数量值

<%= simple_form_for(@order) do |f| %>
  <%= f.simple_fields_for :quantities do |q| %>
    <%= "You have #{q.object.quantity} quantity" %>
    ...