【问题标题】:How do I pass an array to fields_for in Rails?如何将数组传递给 Rails 中的 fields_for?
【发布时间】:2011-04-07 03:24:30
【问题描述】:

我想在关联中的记录子集上使用fields_for

我有一个Month 模型,它是has_many :payments

但在我看来,我只想获得fields_for 其中一些付款。例如:

- fields_for @month.payments.large

这不起作用。

我可以将一组记录传递给fields_for,而不是通常的符号 (fields_for :payments) 方法吗?

【问题讨论】:

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


    【解决方案1】:

    您可以为大额付款添加额外的关联,例如:

    class Month < ActiveRecord::Base
      has_many :payments
      has_many :large_payments, :class_name => "Payment", :conditions => "value > 1000000"
    end
    

    之后就可以正常使用fields_for了:

    - fields_for :large_payments
    

    我认为在模型端封装这个逻辑比在视图中更好。

    【讨论】:

    • 好主意 - 成功了。我还必须添加accepts_nested_attributes_for :large_payments。谢谢:)
    • 你是对的。如果您保护您的付款模式免受大规模分配(保护的良好做法),您应该添加attr_accessible :large_payments_attributes
    【解决方案2】:

    但是,您可以使用对象数组而无需创建任何其他关联。例如,假设您在控制器中准备了一些@large_payments 数组,那么在视图中您可以执行以下操作:

    <%= f.fields_for :payments, @large_payments do |payment| %> ...
    

    这样,如果您有一个相当大的表单或多页表单,并且您不想为要显示的每个组创建额外的关联,则不必这样做。

    【讨论】:

    • 我可能做错了什么,但我无法让这个解决方案发挥作用。
    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多