3

Rails 2.3 から Rails 3 にアップグレードしており、次のようなモデルでいくつかの検証があります。

validates_length_of :corporate_type,  :in => 1..255, :allow_blank => false, :on => :update, :if => Proc.new { |rra| rra.show_corporate_type? }

Rails 2.3では、これは更新時にのみ呼び出されますが、Rails 3では、作成時に呼び出されるようで、下流のいくつかのものを壊します...誰かがこれが作成時に呼び出される理由を説明できますか?

スタックは次のとおりです。

app/models/rra_agreement.rb:11:in `block in <class:RRAAgreement>'

app/models/foo_application_delegate.rb:29:in `create_application'

28 行目と 29 行目は次のとおりです。

rra = RRAAgreement.new()
rra.save

11行目は上記の検証行です

ありがとうジョエル

4

3 に答える 3

1

私は次のことを試してみます:new_record?

validates :corporate_type, :unless => :new_record?

new_records? 作成されたばかりの場合は true を返し、それ以外の場合は false を返します。

于 2012-10-08T14:46:48.983 に答える
0

Rails 3の構文が変更されました。これを試して、更新時にのみ呼び出してください。

validates :corporate_type,:length => {:on => :update, :min => 1, :max => 20 } 
于 2012-10-10T12:05:07.183 に答える
0

まあ、回避策がありますが、それは醜いですが、少なくとも前進できるようです:

 validates_length_of :corporate_type,  :in => 1..255, :allow_blank => false, :on => :update, :if => Proc.new { |rra| return false if rra.id==nil;rra.show_corporate_type? }

これにより、id が存在しない場合は false になり、更新時に存在するはずです。

于 2012-10-08T12:09:52.367 に答える