提交表单时,Rails 4 Params不嵌套

时间:2015-07-09 21:46:32

标签: ruby-on-rails nested-forms

我正在使用Rails 4和嵌套表单。我想关联模型,因此名为Lead的模型是父模型,并与名为QuoteMetal的模型相关联。我希望有人提交表单并让rails将表单中的信息写入数据库的表中。这是我的模特:

class Lead < ActiveRecord::Base
    has_many :quote_metals
    accepts_nested_attributes_for :quote_metals
end
class QuoteMetal < ActiveRecord::Base
  belongs_to :lead
end

以下是表格:

  <%= form_for @lead, class: 'form-horizontal' do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name, class: "form-control" %>

      <%= f.label :notes %>
      <%= f.text_area :note, class: "form-control" %>

    <%= fields_for @quote_metal do |ff| %>       
            <%= ff.label :weight %><br>
            <%= ff.number_field :weight, class: "form-control" %>
                 ....
    <% end %>

    <%= f.submit "Submit" %>

  <% end %>

我的控制员:

class LeadsController < ApplicationController

  def index
    @lead = Lead.new
    @quote_metal = @lead.quote_metal.build
  end

  def create
    raise params.inspect
  end

  def show
  end

private

    def lead_params
        params.require(:lead).permit([:name, ..., 
            quote_metal: [:weight....])
    end

end

我得到的输出参数不是嵌套的。它看起来像:

{"utf8"=>"✓",
 "authenticity_token"=>"JYO/Yt/QBlytHsQaRe9+stzZvZn6xCI7ukeypMZZjpgnowktFcllLhhb2qXK/+45V5l+qJFg/5b4/yZdWLPvGg==",
 "lead"=>{"name"=>"Dick",...,"note"=>"asdf"},
 "quote_metal"=>{"weight"=>"65.20",....},
 "commit"=>"Submit"}

如何将参数嵌套,然后将这些嵌套参数写入与模型对应的表中 - 一个用于铅的表和一个用于金属的表。

1 个答案:

答案 0 :(得分:2)

更改

    <%= fields_for @quote_metal do |ff| %>

    <%= f.fields_for @quote_metal do |ff| %>

使用父级的表单构建器预先添加fields_for将适合您。

另外,您也可以考虑将quote_metal嵌套视图重构为部分视图。