Rails5,嵌套形式的不允许的参数,同时关联现有对象



为什么为什么为什么...?

三种模型(第一模型,第二模型,加入模型),通过加入模型JoinedModel属于其他模型和其他两个has_many。 加入模型accepts_nested_attributes_forfirst_model和second_model。

它还验证是否存在first_model_idsecond_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 的记录,并且只选择其他两个(现有)记录和关联只是让我抓住这些方法......有点蹩脚,但哦好吧...

相关内容

  • 没有找到相关文章

最新更新