为什么为什么为什么...?
三种模型(第一模型,第二模型,加入模型),通过加入模型,JoinedModel属于其他模型和其他两个has_many
。 加入模型accepts_nested_attributes_for
first_model和second_model。
它还验证是否存在first_model_id
和second_model_id
。
连接模型强参数:
private
def joined_params
params.require(:joined_model).permit(:first_model_id, :second_model_id,
:first_models_attributes => [:id, :name],
:second_models_attributes => [:id, :full_name])
end
JoinedModel_form:
<%= form_for(joined_model) do |f| %>
<%= f.fields_for :second_models do |ff| %>
<%= ff.select(SecondModel.all.map {|c| [ c.full_name, c.id ] }, { include_blank: true }) -%>
(以及FirstModel的相同f.fields_for
)
当我提交此表单时,我得到
不允许的参数first_models,second_models
和查询:
参数: {"utf8"=>"✓", "authenticity_token"=>"gvW/OrOXJruAK0ZD+uoajJ4N+dZvpmZF8Ay0TOKF9HPO19d4tRBoWz0C4VoaOABYat8KzrryL8lp5ax+Y9ZJRg==", "joined_model"=>{"first_models"=>{"first_model_id"=>"1"}, "second_models"=>{"second_model_id"=>"1"}}, "commit"=>"创建联接 模型"}
我不知道为什么,如何等表单尝试发送哈希 -"second_models"=>{"second_model_id"=>"1"}
它应该就像"second_model_id"=>"1"
一样,如果我的表单使用简单的f.number_field :first_model_id
而不是select
,它确实会这样......
我找到了答案,并将离开这篇文章,因为在 StackOverflow 上发现了许多类似的未回答的问题
所以,答案是使用父字段生成器进行select
,例如:
<%= form_for(joined_model) do |f| %>
<%= f.fields_for :second_models do |ff| %>
<%= f.select(SecondModel.all.map {|c| [ c.full_name, c.id ] }, { include_blank: true }) -%>
看起来它现在一切正常,但如果有人知道为什么我什至需要为嵌套字段提供构建器对象(在我的情况下|ff|
),如果我什至不使用它,我会给一个 Hi Five 和一个探戈舞!
更新:
所以我发现在这种情况下我什至不需要fields_for
......现在一切都变得有意义了,因为在这里我正在创建一个新的 JoinedModel 的记录,并且只选择其他两个(现有)记录和关联只是让我抓住这些方法......有点蹩脚,但哦好吧...