如何获取一个数组以用于表单中的嵌套属性?

时间:2012-01-10 17:12:05

标签: ruby-on-rails forms

文档描述了传递嵌套数组,但实际上从未给出一个表单字段本身如何的示例

  params = { :member => {
    :name => 'joe', :posts_attributes => [
      { :title => 'Kari, the awesome Ruby documentation browser!' },
      { :title => 'The egalitarian assumption of the modern citizen' },
      { :title => '', :_destroy => '1' } # this will be ignored
    ]
  }}

这是我能想到实际工作的唯一方法。这是正确的,我是否留给自己的设备想出一种方法来对数组元素进行编号(使用增量器),或者是否有特定于RoR的方法来执行此操作?

name='member[posts_attributes][0][title]' value='Kari, the awesome Ruby documentation browser!'
name='member[posts_attributes][1][title]' value='The egalitarian assumption of the modern citizen'

这样的东西?

- f.fields_for "posts_attributes[#{i}]", x do |pa|

或者我离开了?

2 个答案:

答案 0 :(得分:0)

如果您的模型已正确嵌套,Rails应该会处理所有事情。

根据您的示例,请确保:

Member has_many :post_attributes
Member accepts_nested_fields_for :post_attributes

然后,在您的创建操作中,您必须构建要显示的post_attribute对象的数量:

def create
  @member = Member.new
  @member.post_attributes.build
end

您的表单应该只需要:

f.fields_for :post_attributes do |post_attributes_form|
  post_attributes_form.text_field :title

答案 1 :(得分:0)

Railscast 196197很好地解释了你的后续行为。

另请注意,在Rails 3.1中,f.fields_for应该以{{1​​}}而不是=

开头
-