我有一个模型Biblio和一个模型作者。它们相互之间是相互关联的。
添加一个新的biblio,我有一个嵌套的表单。我这样做是这样的:
<%= form_for :biblio, url: administration_add_biblio_path do |f| %>
<%= f.fields_for :authors, Author.new do |aut| %>
<%= aut.hidden_field :name , :name =>"biblio[authors][1]" %>
<% end %>
这是发送给控制器的参数的一部分:
"biblio"=>{"authors"=>{"1"=>{"name"=>"Vabien"}}, "title"=>"test",....
在biblios_controller中,我有这个:
def params_biblio
params.require(:biblio).permit(
:authors)
有这个问题:Unpermitted parameter: authors
模特Biblio看起来像这样:
class Biblio < ApplicationRecord
has_and_belongs_to_many :authors
validates_presence_of :authors
accepts_nested_attributes_for :authors
validates_associated :authors
和班级作者:
class Author < ApplicationRecord
has_and_belongs_to_many :biblios
validates :given_name, presence: true
validates :name, presence: true
问题是作者的验证总是失败。我想这是因为[:author][:name]
被传递给作者模型 - 但我不确定那是问题,如果是,如何解决它。
我应该补充一点,biblio可以拥有一大堆作者,但只需要验证作者[“1”]的存在。
答案 0 :(得分:0)
在这个意义上,嵌套的强参数有点棘手。您必须定义嵌套参数才能使其工作。所以试试这个:
params.require(:biblio).permit(authors: :name)
或与其他参数:
params.require(:biblio).permit(:title, authors: :name)
答案 1 :(得分:0)
我认为问题是对象中的“1”键被传递回控制器。将作者作为数组而不是对象传递回来会更有意义。
"biblio"=>{"authors"=>[{"name"=>"Vabien"}], "title"=>"test",....