Ruby on rails Rails业务规则使用获取未初始化常量事件来验证_

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

我正在尝试使用validates_编写我的第一个业务规则。如果工单状态为“WAPPR”(等待批准),我不希望输入事件(人工)

这在我的事件模型中:

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"
  • 我做了那个改变,现在我明白了

    “未初始化的常量验证程序”

它来自代码的第11行:

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