Rails 3和fields_for与activemodel(无表格)对象

KJF*_*KJF 5 forms ruby-on-rails ruby-on-rails-3

我有一个无表格模型,我正在尝试生成一些表单字段.

表单看起来像这样:

= form_for :users, url: users_path do |f|
  - books.each do |book|
    = f.fields_for :books, book do |bf|
      = bf.hidden_field :title, value: book.title
  = f.submit "Send"
Run Code Online (Sandbox Code Playgroud)

我期望为每个字段生成的内容是这样的:

<input name="users[books][][title]" type="hidden" value="Some Book Title">
<input name="users[books][][title]" type="hidden" value="Some Book Title">
<input name="users[books][][title]" type="hidden" value="Some Book Title">
Run Code Online (Sandbox Code Playgroud)

但是,我实际得到的是

<input name="users[books][title]" type="hidden" value="Some Book Title">
<input name="users[books][title]" type="hidden" value="Some Book Title">
<input name="users[books][title]" type="hidden" value="Some Book Title">
Run Code Online (Sandbox Code Playgroud)

这意味着当提交表单时,只有最后一个输入字段可用,因为前两个字段已被覆盖,因为它们引用相同的内容.

当模型具有活动记录后端但不是无表格时,这可以正常工作.

有什么建议?

wel*_*n97 7

我认为您需要将此添加到您的用户模型中

def books_attributes= attributes
  # do something with attributes
  # probably:
  # self.books = attributes.map{|k,v|Book.new(v)}
end
Run Code Online (Sandbox Code Playgroud)

并且还persisted?为Book实例定义方法.让它回归false.

并添加ffields_for的观点:

= f.fields_for :books, book do |bf|
Run Code Online (Sandbox Code Playgroud)

我希望这会奏效.