Ruby on rails Rails 2.3.8验证和#x27;无法从控制台工作(有效?始终返回true)

Ruby on rails Rails 2.3.8验证和#x27;无法从控制台工作(有效?始终返回true),ruby-on-rails,validation,Ruby On Rails,Validation,我最近将我的rails应用程序从rails 2.3.3升级到了2.3.8,并面临这样一个问题:所有模型验证在浏览器中都可以正常工作,但在使用控制台中的.valid?方法进行测试时完全被忽略。我所有的模特都是这样。 例如,我的公司型号有: class Company < Content ... # Validation before_validation :ensure_token_existance validates_presence_of :name,

我最近将我的rails应用程序从rails 2.3.3升级到了2.3.8,并面临这样一个问题:所有模型验证在浏览器中都可以正常工作,但在使用控制台中的.valid?方法进行测试时完全被忽略。我所有的模特都是这样。 例如,我的公司型号有:

class Company < Content
...

 # Validation

  before_validation     :ensure_token_existance

  validates_presence_of :name,
                        :address,
                        :employee_count,
                        :category_ids,
                        :region_ids,
                        :phone,
                        :email,
                        :if => Proc.new { |company| company.step?(1) },
                        :message => "required field"

  validates_presence_of :description,
                        :if => Proc.new { |company| company.step?(2) },
                        :message => "required field"

  after_update :cache_sweeper

...
如果记录被删除,bang版本(例如保存!)会引发异常 无效的非bang版本没有:保存和更新_属性 返回false,创建并更新只返回对象


谁能帮我找出这里出了什么问题吗

您的验证取决于公司处于某一特定阶段。您从未在控制台中设置此属性。如果您尝试以下操作,会发生什么情况:

c = Company.new
c.step = 1
c.valid?

我只是猜测
step?
方法只是对属性
step
执行一个相等性测试。如果没有,请尽一切努力使您的模型满足
步骤?(1)

您的验证取决于处于特定步骤的公司。您从未在控制台中设置此属性。如果您尝试以下操作,会发生什么情况:

c = Company.new
c.step = 1
c.valid?

我只是猜测
step?
方法只是对属性
step
执行一个相等性测试。如果没有,请尽一切努力使您的模型满足
步骤?(1)

您的
:If=>Proc.new{| company | company.step?(1)}
会导致问题吗?因为我没有看到你设置公司。进入控制台。因此,这可能会导致验证被忽略,因为它不在该步骤上。Thx@Koby,这确实导致了问题,感谢您的帮助。您的
:if=>Proc.new{| company | company.step?(1)}
是否导致了问题?因为我没有看到你设置公司。进入控制台。因此,这可能会导致验证被忽略,因为它不在该步骤上。Thx@Koby,这确实导致了问题,感谢您的帮助非常感谢Derek,这确实解决了一个问题。似乎我花了太多时间将我的应用升级到2.3.8而错过了这个…非常感谢Derek,这真的解决了一个问题。似乎我花了太多时间将我的应用升级到2.3.8而错过了这个。。。
c = Company.new
c.step = 1
c.valid?