1

我有一组需要强制执行的业务规则,例如:

  1. 如果 current_user 不是“admin”,则不允许并给出消息“restricted access”
  2. 如果问题已被回答,则不允许另一个答案并给出消息“问题已被回答”

现在,所有这些基本上都是:“如果 X 为假,则 Y 消息”。

所以,我做了这个方法:

def evaluate_rules rules
  rules.each_pair do |state,message|
    if not (state == true)
      return false,message
    end
  end
  true
end

应该这样称呼:

evaluate_rules { 
  (1==1) => "good", #rule will pass
  (1==2) => "bad" #rule will fail
}

但是,我得到syntax error, unexpected tASSOC (SyntaxError)(1==1)(1==2)散列键的错误。

如何将真/假值放入哈希键中?

另外,我不禁想到以前有人可能已经解决了这个“规则”问题,有什么线索吗?

更新

固定的。有时 Ruby 让我感到沮丧。调用应该是这样的:

evaluate_rules Hash.new({ 
  (1==1) => "good", #rule will pass
  (1==2) => "bad" #rule will fail
})

看起来有点难看但有效

4

1 回答 1

1

有几种方法可以做到这一点,但最好的方法可能是使用内置的 Rails 验证器。这些设置几乎可以完成您所描述的工作。在每个模型中,您都可以创建验证,然后在验证失败时将消息添加到错误数组中。有许多内置验证,以及构建完全自定义验证的能力。这是我对上面列出的两个用例采取的方法。

这里的一些例子:http: //omgbloglol.com/post/392895742/improved-validations-in-rails-3

于 2010-12-23T22:10:42.253 回答