gpt4 book ai didi

ruby-on-rails - Controller 如何手动设置某个字段的验证错误

转载 作者:行者123 更新时间:2023-12-03 00:49:50 26 4
gpt4 key购买 nike

我有一个包含 3 个 ActiveRecord 字段的表单。其中一个字段有一种愚蠢的、依赖于国家的验证要求。 (例如,如果在设置向导表单上创建对象,我仅验证该字段。)

在我的 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)

但是,在 Controller 中执行 @foo.errors.add() 似乎没有执行任何操作...如果其他字段通过验证,它不会阻止 save() 。

另一种方法是将自定义验证处理程序放入模型中...我知道使用errors.add(:field, 'msg')在那里工作得很好...但在这种情况下我的 Controller 如何“传递”信息向验证器告知该字段是否需要验证。

最佳答案

这就是模型逻辑。看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 }

在你的 Controller 中:

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

关于ruby-on-rails - Controller 如何手动设置某个字段的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com