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

Conditional validation in rails using 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' 

我一直在 google 上四处寻找解决方案。我已经看到一个建议来编辑我的控制器以适应这种情况,但由于各种原因这似乎不是最佳选择。我可能在这里遗漏了什么?

提前致谢。

您的初步想法似乎很实用。我不完全确定您的隐藏字段的值是否在模型中可用。像这样尝试一下,让我知道结果如何:

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

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

并且在方法中:

def is_incorporation?
  controller_context == 'incorporation'
end