あるけれども、私は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
値が存在していてもそれが失敗する理由はわかりません。
account_paramsをチェックして、これらのパラメータが強いパラメータによって制限されていないことを確認してください。 – Acacia
モデルコードが構文的に正しくありません。私はあなたが手でそれを再入力し、いくつかのタイプミスをしたと仮定します。とにかく、コードを修正してください。コードを自分でテストすることができます。また、アカウントテーブル –
に対して '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) –