如何在Rails中实现业务规则?

时间:2010-12-23 21:53:55

标签: ruby-on-rails ruby-on-rails-3 business-rules

我需要执行一系列业务规则,例如:

  1. 如果current_user不是“admin”,则不允许并给出“限制访问”消息
  2. 如果问题已得到解答,请不要再允许其他答案,并发出“问题已经回答”的信息。
  3. 现在,所有这些基本上都是:“如果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)

    如何将true / false值放入哈希键?

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

    更新

    固定。 有时Ruby会让我感到沮丧。 电话应该是这样的:

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

    看起来有点难看,但有效

1 个答案:

答案 0 :(得分:1)

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

此处的一些示例:http://omgbloglol.com/post/392895742/improved-validations-in-rails-3