创建嵌套模型表单

时间:2011-01-02 17:56:41

标签: ruby-on-rails ruby ruby-on-rails-3 nested-forms

我正在尝试构建一个多模型表单 - 但其中一个问题是,我需要链接表单中的模型。

例如,假设我的表单有以下模型:Users,Profiles

创建新用户时,我想同时创建一个新的配置文件,然后将这两个配置文件链接起来。问题是,如果还没有创建它们,它们还没有ID - 那么我该如何分配链接值?

谢谢!

-Elliot

我注意到,有些人喜欢这个 - 要查看关于链接这两个模型的更多信息,请查看我的第二个问题:Linking two models in a multi-model form

1 个答案:

答案 0 :(得分:5)

实现所需结果的一种方法是,您可以制作一个利用Rails中嵌套属性支持的表单:

<%= form_for(@user) do |f| %>
  <%= f.label :my_user_attribute %>
  <%= f.text_field :my_user_attribute %>

  <%= f.fields_for :profile do |fp| %>
    <p>
      <%= fp.label :my_profile_attribute %>
      <%= fp.text_field :my_profile_attribute %>
    </p>
  <% end %>    

  <%= f.submit %>
<% end %>

您还需要将以下内容添加到User类:

accepts_nested_attributes_for :profile

您可以阅读有关Active Record Nested Attributes here的更多信息。 您可以阅读有关ActionView表单助手here的更多信息(在页面中搜索“嵌套属性示例”)。

如果您使用此方法,以及两个模型上的良好验证,您将不必担心跟踪数据库ID,因为两者都将由ActiveRecord同时创建(但直到两个模型对象都有效) )。