如何将数组传递给Rails中的fields_for?

nfm*_*nfm 4 forms field ruby-on-rails nested-forms formbuilder

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

我有一个Month模型,哪个has_many :payments.

但在我看来,我只希望得到fields_for一些付款.例如:

- fields_for @month.payments.large
Run Code Online (Sandbox Code Playgroud)

这不起作用.

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

Vol*_*ldy 5

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

class Month < ActiveRecord::Base
  has_many :payments
  has_many :large_payments, :class_name => "Payment", :conditions => "value > 1000000"
end
Run Code Online (Sandbox Code Playgroud)

之后你可以用fields_for普通的方式:

- fields_for :large_payments
Run Code Online (Sandbox Code Playgroud)

我认为在模型方面将这种逻辑封装在视图中是一种更好的方法.

  • 好的想法 - 这就是诀窍.我还必须添加`accepts_nested_attributes_for:large_payments`.谢谢 :) (2认同)
  • 你是对的.如果您保护您的支付模式免受大规模分配(保护良好做法),您应该添加`attr_accessible:large_payments_attributes`. (2认同)

top*_*her 5

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

<%= f.fields_for :payments, @large_payments do |payment| %> ...
Run Code Online (Sandbox Code Playgroud)

这样,如果你有一个非常大的表单或多个表单页面,并且你不想为你想要显示的每个组创建一个额外的关联,你不必这样做.