jpw*_*ynn 7 validation ruby-on-rails
我有一个包含3个ActiveRecord字段的表单.其中一个领域有一些愚蠢的,以及STATE-DEPENDENT验证要求.(例如,如果在安装向导表单上创建对象,我只验证该字段.)
在我的POST处理程序中创建对象,我想我可以调用errors.add来插入一个特殊的错误条件
@foo = Foo.new(params[:foo])
if goofy_conditions(params[:foo][:goofy_field])
@foo.errors.add(:goofy_field, "doesn't meet the goofy conditions" )
end
respond_to do |format|
if @foo.save
...
else
... redirect back to form (with error fields hilited)
Run Code Online (Sandbox Code Playgroud)
但是,在控制器中执行@ foo.errors.add()似乎没有做任何事情......如果其他字段通过验证,它不会阻止save().
另一种方法是将自定义验证处理程序放入模型中...我知道使用errors.add(:field,'msg')可以正常工作......但在这种情况下,我的控制器如何"传递"信息到验证器告诉它该字段是否需要验证.
bri*_*ker 12
这是模型逻辑.查看自定义验证
class GoofyThing < ActiveRecord::Base
validate :goofy_attribute_is_goofy
def goofy_attribute_is_goofy
if goofy_conditions(self.goofy_field)
self.errors.add(:goofy_field, "doesn't meet the goofy conditions" )
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后它就像任何其他验证一样.
编辑
您可以使用:if选项有条件地验证:
attr_accessible :via_wizard
validate :goofy_attribute_is_goofy, :if => lambda { self.via_wizard }
Run Code Online (Sandbox Code Playgroud)
并在您的控制器中:
class WizardController < ApplicationController
before_filter :get_object, :set_wizard
#...
def get_object
@object = GoofyThing.find(params[:id])
end
def set_wizard
@object.via_wizard = true
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7750 次 |
| 最近记录: |