【问题标题】:Conditional validation in rails using attr_accessor使用 attr_accessor 在 Rails 中进行条件验证
【发布时间】:2016-02-16 07:29:29
【问题描述】:

我正在尝试在我的模型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' 

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

提前致谢。

【问题讨论】:

  • 你说它被很多控制器使用是什么意思?
  • @JawadKhawaja 感谢您的回复;这意味着它被他们引用。公司可以通过公司、市值表或可转换票据进行编辑。所有这些都有自己的特定要求需要验证。

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


【解决方案1】:

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

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

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

在方法中:

def is_incorporation?
  controller_context == 'incorporation'
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多