我有一个无表模型,我正在尝试为其生成一些表单字段。

该表格如下所示:

= 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/

10-13 02:15