使用 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
我正在尝试在我的模型中进行一些条件验证 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