我在may rails项目中使用嵌套属性但是当我提交一个表单时,我得到_attributes作为哈希的散列,而不是像文档中所说的哈希数组,这意味着rails无法获取新对象。
{"utf8"=>"✓",
"authenticity_token"=>"oLy4lJyXBgKiUI+TlQgEGIRNLeNOG5WqiHLqYNiZYe1JXC7+/j02ZDsBAnVZCAgeUJw6B5iTXxkzV1XzUIDn+w==",
"form"=>{"title"=>"test 3", "questions_attributes"=>{"0"=>{"question_text"=>"hello what?"}}},
"commit"=>"Create Form"}
就像在上面的代码中一样:questions_attributes应该是一个数组,而不是一个带有名为'0'的元素的哈希
表单代码:
= form_for(setup_form(@form)) do |f|
= error_messages_for(f.object)
= f.label(:title, 'Title')
= f.text_field(:title)
= f.fields_for(:questions) do |q|
= q.label(:question_text, 'Question')
= q.text_field(:question_text)
= f.submit "Create Form", :class => "btn btn-lg btn-primary"
答案 0 :(得分:2)
我认为你还没有阅读整篇文档。来自documentation
也可以传入关联集合的嵌套属性 哈希哈希的形式而不是哈希数组:
Member.create( name: 'joe', posts_attributes: { first: { title: 'Foo' }, second: { title: 'Bar' } } )
与
具有相同的效果Member.create( name: 'joe', posts_attributes: [ { title: 'Foo' }, { title: 'Bar' } ] )
散列的键是:posts_attributes的值 在这种情况下忽略了。但是,不允许使用' id'或者:id 对于其中一个键,否则哈希将被包装在一个数组中 并解释为单个帖子的属性哈希。
以散列的形式传递关联集合的属性 哈希可以与HTTP / HTML参数生成的哈希一起使用, 哪里可能没有自然的方式来提交一系列哈希值。
答案 1 :(得分:0)
这是嵌套属性的默认行为。如果向表单添加更多问题字段,则输出将为:
{"utf8"=>"✓",
"authenticity_token"=>"oLy4lJyXBgKiUI+TlQgEGIRNLeNOG5WqiHLqYNiZYe1JXC7+/j02ZDsBAnVZCAgeUJw6B5iTXxkzV1XzUIDn+w==",
"form"=>{"title"=>"test 3", "questions_attributes"=>{
"0"=>{"question_text"=>"hello what?"},
"1"=>{"question_text"=>"Hi"},
"2"=>{"question_text"=>"Hello"}},
"commit"=>"Create Form"}