加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 控制器如何手动设置某个字段的验证错误

发布时间:2020-12-17 04:17:47 所属栏目:百科 来源:网络整理
导读:我有一个包含3个ActiveRecord字段的表单.其中一个领域有一些愚蠢的,以及STATE-DEPENDENT验证要求. (例如,如果在安装向导表单上创建对象,我只验证该字段.) 在我的POST处理程序中创建对象,我想我可以调用errors.add来插入一个特殊的错误条件 @foo = Foo.new(pa
我有一个包含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)

但是,在控制器中执行@ foo.errors.add()似乎没有做任何事情……如果其他字段通过验证,它不会阻止save().

另一种方法是将自定义验证处理程序放入模型中…我知道使用errors.add(:field,’msg’)可以正常工作……但在这种情况下,我的控制器如何将’传递’信息传递给验证器告诉它该字段是否需要验证.

解决方法

这是模型逻辑.看看 custom validations
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

然后它就像任何其他验证一样.

编辑

您可以使用:if选项有条件地验证:

attr_accessible :via_wizard
validate :goofy_attribute_is_goofy,:if => lambda { self.via_wizard }

在你的控制器中:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读