2017-02-07 2 views
0

У меня есть одна модель 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 %> 

Это часть Params, которые передаются в контроллер:

"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] передается модели автора, но я не уверен, что это проблема, и если да, то как ее решить.

Я должен добавить, что в библии может быть целая куча авторов, но нужно проверить только присутствие автора ["1"].

+0

Опечатка? 'auteurs' для' authors' – MurifoX

+0

yes type, я исправил его, как вы сделали этот комментарий. Забыл перевести с французского на английский. Теперь сделано. – thiebo

+0

Вы создали таблицу authors_biblios? Убедитесь, что таблица - Authors_Biblios, а не наоборот. Rails ожидает, что такие таблицы должны быть названы в лексическом порядке. – bkunzi01

ответ

0

Вложенные сильные параметры немного сложны в этом смысле. Вы должны определить свои вложенные параметры, чтобы сделать эту работу. Так что попробуйте это:

params.require(:biblio).permit(authors: :name) 

Или с другим Params:

params.require(:biblio).permit(:title, authors: :name) 
+0

Когда я это делаю, я получаю 'ActiveRecord :: AssociationTypeMismatch в Administration :: BibliosController # create' и' Author (# 70213626064300) ожидаемый, получил Array (# 70213521745920) '(автор единственное, что есть). У меня больше нет ошибки параметра. – thiebo

0

Я думаю, что проблема является ключом «1» в вашем объекте передается обратно к контроллеру. Было бы более целесообразно передать авторов назад как массив, а не объект.

"biblio"=>{"authors"=>[{"name"=>"Vabien"}], "title"=>"test",.... 
+0

Как это сделать? В настоящее время у меня это в моей форме: '<% = aut.text_field: name,: name =>" biblio [авторы] [имя] ", и это приводит к объекту. – thiebo

+0

try: <% = aut.text_feild: name,: name => "biblio [авторы] [] [name]" –

Смежные вопросы