使用 Reform Form Object with Composition 字段的意外命名

Unexpected naming of fields using Reform Form Object with Composition

答案: model 调用是多余的。应该只有一个,这个例子中的最后一个是赢家。我误用了表单对象 DSL。 :/

我有一个 Rails 4.1 形式的改革形式对象,其结构如下...

表单对象

class MyForm < Reform::Form
  include Composition

  model :user
  model :user_group

  property :name, on: :user_group
  property :email, on: :user
end

控制器

# ...
@form = MyForm.new(user: User.new, user_group: UserGroup.new)
# ... 

查看

<%= form_for(@form) do |f| %>
<%= f.text_field(:name) %>
<%= f.email_field(:email) %>
<% end %>

呈现的 HTML

<input type="text" name="user_group[name]" id="user_group_name">
<input type="email" name="user_group[email]" id="user_group_email">

我的问题是为什么这些字段似乎忽略了模型映射并将它们呈现为错误的模型名称?我在这里做错了什么?

您只能调用一次::model!一旦您使用正确的模型(或任何名称)调用它,渲染就会将字段命名为您指定的任何 :: 模型。 Reform 的重点是隐藏有关模型名称的内部信息!