我有一个无表模型,我正在尝试为其生成一些表单字段。
该表格如下所示:
= 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"
我期望为每个字段生成的内容是这样的:
<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">
但是,我实际上得到的是
<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">
这意味着在提交表单时,只有最后一个输入字段可用,因为前两个输入字段引用相同的内容而被覆盖。
当模型具有事件记录后端时,此方法正常运行,但在无表的情况下则无效。
有什么建议么?
最佳答案
我认为您需要将此添加到您的用户模型中
def books_attributes= attributes
# do something with attributes
# probably:
# self.books = attributes.map{|k,v|Book.new(v)}
end
并为Book实例定义
persisted?
方法。使其仅返回false
。并在 View 中为您的
f
添加fields_for
:= f.fields_for :books, book do |bf|
我希望这会起作用。
关于ruby-on-rails - Rails 3和fields_for与activemodel(无表)对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9361676/