2017-02-07 3 views
0

私は1つのモデルBiblioと1つのモデルを持っています。彼らはお互いに関係している。はネストされたフォームの検証を行うことができません

新しいビブリオを追加すると、ネストされたフォームが作成されます。

<%= 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の一部です:私はそうのようなことを行い、これを持っている

def params_biblio 
    params.require(:biblio).permit(
     :authors) 

:biblios_controllerで

"biblio"=>{"authors"=>{"1"=>{"name"=>"Vabien"}}, "title"=>"test",.... 

が、私はこれを持っています問題: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

これは誤植ですか? 'authors 'のためのauteurs – MurifoX

+0

はいタイプ、あなたがそのコメントをしたときに私はそれを修正しました。フランス語から英語への翻訳は忘れてしまった。今終わった。 – thiebo

+0

authors_bibliosテーブルを作成しましたか?テーブルがAuthors_Bibliosで、他の方法ではないことを確認してください。 Railsは、これらのテーブルに語彙順に名前が付けられると考えています。 – bkunzi01

答えて

0

ネストされた強力なパラメータは、この意味で少しトリッキーです。このようにするには、ネストされたパラメータを定義する必要があります。だから、これを試してみてください。

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

や他のparamsとを:

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

私はそれを行うと、Administration :: BibliosController#create'でActiveRecord :: AssociationTypeMismatchを取得し、Array(#70213521745920) '(作者は単数)という名前のAuthor(#70213626064300)が必要です。私はもう許容されていないパラメータエラーを持っていません。 – thiebo

0

私は問題がコントローラに戻る渡されて、あなたのオブジェクト内の「1」キーだと思います。作者をオブジェクトではなく配列として返す方が合理的でしょうか。

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

どうすればいいですか?私は現在、私のフォームでこれを持っています: '<%= aut.text_field:name、:name =>" biblio [authors] [name] "'そしてそれはオブジェクトになります。 – thiebo

+0

try:<%= aut.text_feild:name、:name => "biblio [authors] [] [name]" –

関連する問題