2017-11-15 7 views
0

あるけれども、私はupdate_attributes検証が値が正しい

class Account < ActiveRecord::Base 
validates_length_of :amount, :in 1..255, :on => update, :if => Proc.new { |a| false if a.id == nil;a.amount.blank? } 
validates_length_of :name, :in 1..255, :on => update, :if => Proc.new { |a| false if a.id == nil;a.name.blank? }, :unless => user_has_amount? 

end 

私のモデルに持って失敗し、それが正常に動作しますが、それらと検証が混乱している失敗しました。私はprocがtrueを返すか、私のコントローラで falseを返したが、私は

@account.update_attributes({:name => "king", :amount => "1223"} 

を持っていない限り、保存が失敗し、私はエラーをチェックするとき、私は

@account.errors.details 
{:name =>[{:error=>:too_short, :count=>1}], :amount =>[{:error=>:too_short, :count=>1}]} 

強いのparamsがあり得る場合に検証にのみ実行する必要があることを知っています私は def self.paramsを持っているので問題ではありません params.require(:account).permit! end

値が存在していてもそれが失敗する理由はわかりません。

+0

account_paramsをチェックして、これらのパラメータが強いパラメータによって制限されていないことを確認してください。 – Acacia

+0

モデルコードが構文的に正しくありません。私はあなたが手でそれを再入力し、いくつかのタイプミスをしたと仮定します。とにかく、コードを修正してください。コードを自分でテストすることができます。また、アカウントテーブル –

+0

に対して 'schema.rb'を提供してください。これは、' validates:amount、length:{in:6..20}、on::update'となります。 validates_length_ofの代わりに 私はレールのドキュメントでそれを見つけました:[Validations Helpers - > Length](http://guides.rubyonrails.org/active_record_validations.html#length) –

答えて

0

問題は一つの理由のためでした。このコードは、検証中に呼び出された関数の1つにある

のクラスから継承しています。

更新を試みるたびに、その検証がヒットしたら、元の値がデータベースから読み込まれ、古い値が空であれば新しい値が無視されるため、失敗しました。

ありがとうございました

0

以下、これを試してみてください:

class Account < ActiveRecord::Base 
    validates :amount, length: { in: 1..255 }, on: :update 
    validates :name, length: { in: 1..255 }, on: :update 
end 
+0

を更新しました。申し訳ありませんが、うまくいかなかった。 –

+0

rails consoleでレコードを作成し、ここにエラーメッセージを出力できますか? –

+0

ActiveRecord :: RecordInvalid:検証に失敗しました:名前が短すぎます(最小値は1文字)、量が短すぎます(最小値は1文字) –

0

はあなたの強いパラメータを確認してください。妥当性検査を受ける前に、何かが間違っているとエラーが表示されます。:name =>[{:error=>:too_short, :count=>1}]これは、最小文字列数は1ですが、文字列はそれほど長くないことを示しています。 Here is the docs on that.

試してみてください:Account.find(1).update_attributes({:name => "king", :amount => "1223"} @accountが正しく設定されていないかどうか確認してください。

またさらに助けるためにあなたのエラーの言語をカスタマイズすることができます起こった

validates_length_of : name, within: 1..255, too_long: 'pick a shorter name', too_short: 'pick a longer name' 
+0

メッセージは変更されましたが、まだ発生しています。 –

+0

あなたはレールコンソールでジャンプして、更新しているレコードが属性name:kingとamount:1223を表示していることを確認できますか? –

+0

私はそれが失敗したと考えて、その名前がまだnullであり、amountもnullです。 –

関連する問題