Rails 提交表单时 4 个参数不嵌套
Rails 4 Params Not Nesting When Form Submitted
我正在使用 Rails 4 和嵌套表单。我想关联模型,因此名为 Lead 的模型是父模型并与名为 QuoteMetal 的模型相关联。我希望有人提交表格并让 rails 将表格中的信息写入数据库的 table。这是我的模型:
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"}
如何让参数嵌套,然后将这些嵌套参数写入与模型对应的 tables - 一个 table 用于引导,一个 table ] 为金属。
改变
<%= fields_for @quote_metal do |ff| %>
到
<%= f.fields_for @quote_metal do |ff| %>
在 fields_for
前加上父级的表单生成器将为您正确确定范围。
另外,您还可以考虑将 quote_metal
嵌套视图重构为局部视图。
我正在使用 Rails 4 和嵌套表单。我想关联模型,因此名为 Lead 的模型是父模型并与名为 QuoteMetal 的模型相关联。我希望有人提交表格并让 rails 将表格中的信息写入数据库的 table。这是我的模型:
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"}
如何让参数嵌套,然后将这些嵌套参数写入与模型对应的 tables - 一个 table 用于引导,一个 table ] 为金属。
改变
<%= fields_for @quote_metal do |ff| %>
到
<%= f.fields_for @quote_metal do |ff| %>
在 fields_for
前加上父级的表单生成器将为您正确确定范围。
另外,您还可以考虑将 quote_metal
嵌套视图重构为局部视图。