2016-09-16 8 views
0

私はユーザとキーを管理する非常に単純なアプリケーションを構築しています。キーは、ユーザーのネストされた属性です。私はRailsCast #196に触発されています。 モデルは次のように定義される:ユーザー・コントローラが強いパラメータを含むネストされたパラメータをビルドメソッドに渡す正しい方法はどれですか? (Ruby on Rails 5)

class User < ApplicationRecord 
    #Validations 
    --- 
    #Relations 
    has_many :keys, :dependent => :destroy 
    accepts_nested_attributes_for :keys, :reject_if => :all_blank, :allow_destroy => true 
end 

class Key < ApplicationRecord 
    #Validations 
    --- 
    #Relations 
    belongs_to :user 
end 

def user_params 
    params.require(:user).permit(:nom, :prenom, :section, :email, :password, keys_attributes: [:id, :secteur, :clef]) 
end 

私はそれぞれの新しいユーザ(ユーザ制御)のための1つのキーを初期化したい:

# GET /users/new 
def new 
    @user = User.new 
    key = @user.keys.build({secteur: "Tous", clef: "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678"}) 
end 

私はユーザーの鍵を初期化するために多くの方法を試しましたが、どのようにそれにパラメータを渡すのか分かりません。ユーザーは常に作成されますが、最初のキーは作成されません。エラーメッセージは発行されません。

+0

あなたは単にkey = @ user.keys.buildを実行し、次にネストされたフォームで、ランダムキーを生成するメソッドの値を持つ隠しフィールドを追加できます。 – luissimo

答えて

0

ビルドメソッドのパラメータ内の '{'タグを削除します。次のようになります。

key = @user.keys.new(secteur: "Tous", clef: "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678") 

また、ビルド方法は「新しい」と、私はいつもそれから離れて迷い、ちょうどより身近な「新しい」を使用してきたように、レール3つのアプリに異なる動作をするために使用のためだけのエイリアスです。方法。明らかに、コントローラのある時点でオブジェクトを保存することを忘れないでください。

+0

親を保存するときにネストされた属性に対してsaveメソッドが暗黙的に呼び出されていませんか? – user1185081

関連する問題