【问题标题】:Rails, nested attributes, created in new action,Rails,嵌套属性,在新操作中创建,
【发布时间】:2013-09-15 15:34:20
【问题描述】:

我有一个订单系统,用户在其中选择保存在 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

【问题讨论】:

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


    【解决方案1】:

    我认为您需要 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" %>
        ...
    

    【讨论】:

    • 您能详细说明一下吗? =) 我的意思是,只要把 f.object.quantities 给我:#<:associations::collectionproxy::activerecord_associations_collectionproxy_quantity:0x00>
    • 我明白了。这是因为 @order.quantities 返回一个 AR 关系。很难准确地说出您需要什么以及您希望如何构建表单。例如,如果您想构建嵌套表单(使用accept_nested_attributes),您需要将simple_fields_for 写为f.simple_fields_for :quantities do |quantity| ...
    • 谢谢,我想编辑从 cookie 构建的新数量。
    • 这给我留下了一个空白(只有一个)数量输入字段
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2023-03-18
    相关资源
    最近更新 更多