Ruby on rails Rails业务规则使用获取未初始化常量事件来验证_
我正在尝试使用validates_编写我的第一个业务规则。如果工单状态为“WAPPR”(等待批准),我不希望输入事件(人工) 这在我的事件模型中:Ruby on rails Rails业务规则使用获取未初始化常量事件来验证_,ruby-on-rails,Ruby On Rails,我正在尝试使用validates_编写我的第一个业务规则。如果工单状态为“WAPPR”(等待批准),我不希望输入事件(人工) 这在我的事件模型中: class Event < ActiveRecord::Base validates_presence_of :workorder_id validates_with ::WOStatusValidator ... end class WOStatusValidator < ActiveModel::Validator
class Event < ActiveRecord::Base
validates_presence_of :workorder_id
validates_with ::WOStatusValidator
...
end
class WOStatusValidator < ActiveModel::Validator
def validate(record)
if record.workorder.wostatus.statuscode == "WAPPR"
record.errors[:base] << "Can't enter labor if workorder status is WAPPR"
end
end
end
谢谢你的帮助
更新
机架会话具有以下功能:
{“session_id”=>“52c6e4be5eeba78e5954a2997d9cac73”,“_csrf_token”=>“kf1CYslb/RVMTWJOD4QN4L1VZCECWQOG3VEYLQNTTG=”,“warden.user.user.user.key”=>[“user”,[11],“$2a$10$EHEJJFT/B1jsjNIoR5.oJ2.”],“flash”=>,“flash”=>,@closed=false,@flash=>,@flash={:workorder\id=>2,:employee=>5=>true,@now=>
而workorder/2的状态为wostatus/235,wostatus的状态代码为WAPPR
动作名称为“新建”
错误来自visible_action?(gem)actionpack-3.2.12/lib/action_controller/metal/hide_actions.rb中的此代码
第36行
35 def visible_action?(action_name)
36 return @visible_actions[action_name] if @visible_actions.key?(action_name)
37 @visible_actions[action_name] = !hidden_actions.include?(action_name)
38 end
更新2
jvnill建议:
record.errors.add :base, "Can't enter labor if workorder status is WAPPR"
- 我做了那个改变,现在我明白了 “未初始化的常量验证程序”
8 class RoutingError < ActionControllerError #:nodoc:
9 attr_reader :failures
10 def initialize(message, failures=[])
11 super(message)
12 @failures = failures 13 end 14 end
8类路由错误
UDPATE3
我是否使用了正确的编码类型来执行此业务规则?有更好的方法吗?替换:
validates_with WOStatusValidator
与:
它明确告诉Rails查找顶级常量。替换:
validates_with WOStatusValidator
与:
它明确告诉Rails查找顶级常量。谢谢!但是,现在我得到了nil:nilclass的未定义方法'key',您能否尝试
record.errors.add:base,“如果workorder状态为WAPPR,则无法输入人工”
?jvnill-我使用了您的更改,现在得到了“未初始化常量WOStatusValidator”它来自代码的第11行:8类路由错误
谢谢!但是,现在我得到了nil:nilclass的未定义方法'key',您能否尝试record.errors.add:base,“如果workorder状态为WAPPR,则无法输入人工”
?jvnill-我使用了您的更改,现在得到了“未初始化常量WOStatusValidator”它来自代码的第11行:8类路由错误
错误来自何处?提供有关例外情况的详细信息您的编辑没有帮助我正在尝试向wostatus=WAPPRso@visible\u actions
为零的工单添加新事件,简单来说,错误是从何而来的?提供有关例外情况的详细信息您的编辑没有帮助我正在尝试向wostatus=WAPPRso@visible\u actions
为零的工单添加新事件
validates_with ::WOStatusValidator