Rails业务规则使用validates_with获取未初始化的常量事件

时间:2013-04-05 15:11:02

标签: ruby-on-rails

我正在尝试使用validates_with编写我的第一个业务规则。如果工单的状态为“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

但是,我明白了:

undefined method `key?' for nil:NilClass

感谢您的帮助!!

更新

机架会话有这个:

{“session_id”=&gt;“52c6e4be5eeba78e5954a2997d9cac73”,“_ csff_token”=&gt;“kf1CYslb / rVmTWjoD4Qn4l1vZCeCwQOgg3VEYLqNTTg =”,“warden.user.user.key”=&gt; [“用户”,[11],“$ 2 a $ 10 $ EHEjfT / B1jsjNIoR5.oJ2。“],”flash“=&gt;#,@ closed = false,@ splash = {:workorder_id =&gt; 2,:employee_id =&gt; 5,:comment =&gt; true} ,@ now = nil&gt;}

并且workorder / 2有wostatus / 235而且wostatus有statuscode = WAPPR

action_name是“new”

错误来自于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

UPDATE2

jvnill建议:

record.errors.add :base, "Can't enter labor if workorder status is WAPPR"
  • 我做了那个改变,现在我得到了

    “未初始化的常量WOStatusValidator”

这是来自此代码的第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

UDPATE3

我是否使用正确的编码类型来执行此业务规则?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

替换:

validates_with WOStatusValidator

使用:

validates_with ::WOStatusValidator

它明确告诉Rails寻找顶级常量。