如何在Rails 4中从多个无关联(非嵌套)模型创建一个表单?

时间:2015-05-27 16:54:49

标签: ruby-on-rails html5 postgresql ruby-on-rails-4

我正在使用Rails 4和postgres。每个模型都有一个输入表单,用户输入参数。然后使用这些参数来搜索表格。每个模型都有自己的参数与其他模型无关,并且自己的表可以搜索。然后,所有模型都从各自的表中返回一个值。模型及其相关表单只能单独工作(我在模型1中输入我的参数,然后在表中搜索模型1并返回答案)。

我正在尝试创建一系列允许我组合模型的页面。例如,我想要用户可以在所有3个模型中输入信息的页面,仅包含3个模型中的2个的页面,或者甚至是具有两个相同模型和第三个不同模型的页面。这样做的最佳方式是什么?

我已经尝试过nested_attributes,但我不确定它是否适用,因为我没有关联。我是否遗漏了具有该功能的东西,它允许它在这个用例中工作?谢谢!

2 个答案:

答案 0 :(得分:2)

这是一个包含多个模型的表单的一个有点人为的例子,没有嵌套:

<%= form_tag(controller: "foo", action: "bar", method: :post) do %>
  <%= fields_for(:subscriber, @user) do |sub_fields| %>
    <div class="row">
      <%= sub_fields.label :email %>
      <%= sub_fields.text_field :email %>
    </div>
  <% end %>
  <%= fields_for(@cat) do |cat_fields| %>
    <div class="row">
      <%= sub_fields.label :name %>
      <%= cat_fields.text_field :name %>
    </div>
  <% end %>
<% end %>

让我们从顶部过来:

  • 我们使用form_tag代替form_for,因为我们只想要一个未与资源绑定的表单。
  • fields_for允许我们将输入绑定到任意资源。

由此产生的参数将是这样的:

{
  subscriber: {
    email: 'john.doe@example.com'
  },
  cat: {
    name: 'Nisse'
  }
}

另见:

答案 1 :(得分:0)