【问题标题】:How to create one form from multiple unassociated (Not Nested) models in Rails 4?如何从 Rails 4 中的多个未关联(非嵌套)模型创建一个表单?
【发布时间】:2015-05-27 16:54:49
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这是一个包含多个模型但没有嵌套的表单的一个有点做作的示例:

    <%= 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'
      }
    }
    

    另见:

    【讨论】:

    • 谢谢。那行得通!我只需要添加一个 submit_tag 并在 form_tag 和 fields_for 中获取正确的语法。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多