使用attr_accessor在rails中进行条件验证

时间:2016-02-16 07:29:29

标签: ruby-on-rails validation ruby-on-rails-4 attr-accessor

我试图在我的模型Company中进行一些条件验证。基本上这个想法是许多不同的控制器使用Company,每个控制器都有自己的验证要求。我的想法是使用attr_accessor添加一个标识所讨论的控制器的属性,如下所示:

<%= company.hidden_field :controller_context, value: "incorporation" %>

但是,我在验证时无法使用:controller_context作为条件。

validate :final_incorporation, if: "controller_context=='incorporation'"

上面给出了没有错误,但也没有触发验证。但是,如果我尝试使用以下内容在我的日志中获取controller_context的值:

logger.debug "controller_context: #{controller_context}"

我收到错误

undefined local variable or method `controller_context' 

我一直在谷歌寻找解决方案。我已经看到了一个建议来编辑我的控制器以适应这一点,但由于各种原因,这似乎并不合适。我可能会在这里失踪什么?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您最初的想法似乎很实用。我不完全确定隐藏字段的值是否在模型中可用。试试吧,让我知道它是怎么回事:

attr_accessor :controller_context添加到您的模型中。在您的控制器中,在致电保存之前,将控制器的名称分配给@company.controller_context

然后在模型中验证时添加一个条件,例如: validate :final_incorporation, if: :is_incorporation

在方法中:

def is_incorporation?
  controller_context == 'incorporation'
end