2017-03-19 10 views
1

私はレール上のパラメータの存在を確認しようとしています。これは、このパラメータが存在しない場合、私はここに レールモデルの検証 - 未定義のメソッドエラー

は、クライアントから送信されたサンプルパラメータリストでエラーをスローするレールを希望、理想的には User.rb

validates :terms_of_service, presence: true 
    validates :privacy_policy, presence: true 

ためのコードスニペットで

Parameters: {"username"=>"f", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "confirm_success_url"=>"http://localhost:4000", "config_name"=>"default", "registration"=>{"username"=>"f", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "confirm_success_url"=>"http://localhost:4000"}} 

ただし、レールには以下のエラーが発生します

NoMethodError (undefined method `terms_of_service' for #<User:0x007f16d402e788>): 

私は実際にパラメータをテストしているときにはterms_of_serviceメソッドがあるべきだと思いますか?それ以外の列の属性に役立ちます

attr_accessor :terms_of_service 

希望の場合でも

+0

'terms_of_service'はUsersテーブルのカラムに対応するパラメータであり、ActiveModelはその値を取得するメソッドを作成します。これは自動であり、そこにない場合、おそらく列もそこにはありません。 'db/schema.rb'を投稿してください。 –

+0

ああ、私は、dbに対応する列が必要であることを知っていませんでした。私は、テーブルにユーザを保存する前に、両方のパラメータ(tosとprivacy)が真であることを確実にすることを望んでいました。私は列をしたくない場合、私はモデルテーブルでbefore_commitフックを使用して、パラメータが存在することを確認する必要があると仮定していますか? – Kannaj

+0

またはterms_of_serviceをattr_accessorとして作成できます。 –

答えて

1

それはそれで動作しますgetterメソッドとsetterメソッドと検証を設定します、attr_accessorを追加!

+0

私はattr_accessorを使ってparamsにアクセスできますが、 'validates:terms_of_service、acceptance:true'は送信された値に関係なく常に失敗するようです(false、true、またはkeyはありません)。これはテーブルに列がないことと関連していますか? – Kannaj

+0

非カラム属性に 'attr_accessor'を追加する必要があります。 – RSB

関連する問題