【问题标题】:Pass attributes to ActiveRecord before_validation将属性传递给 ActiveRecord before_validation
【发布时间】:2014-07-10 20:24:27
【问题描述】:

ActiveRecord 的validates_each 方法支持多个属性:

validates_each :foo, :bar, :baz do |record, attr, value|

    # logic here

end

有没有办法通过 ActiveRecord 回调来做到这一点?

before_validation [:foo, :bar, :baz] :do_something

...

protected

  def do_something(*args)

    args.each do |a|

      # logic here

    end

  end

...

** 编辑 **

:foo:bar:baz 是 URL。我想在应用验证之前对它们进行“规范化”(如果缺少,请在开头添加“http://”)。

【问题讨论】:

  • 您要访问哪些参数? self.name 应该返回新名称或旧名称; self.changes[:name].try(:first) 应该返回新名称,如果它被更改,self.changes[:name].try(:last) 将返回旧名称如果改变

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord


【解决方案1】:

我不相信它接受多个参数,但您可以有多个验证调用同一个方法。

before_validation :foo, :do_something
before_validation :bar, :do_something
before_validation :baz, :do_something

【讨论】:

  • :do_something 中的第一个参数(例如:foo)如何引用?
【解决方案2】:
before_validation :do_something

protected
  def do_something
    #do something here
  end
end

This documentation 拼写得很清楚。

【讨论】:

  • 我读到了。然而,我希望有人可能有一个漂亮的把戏。
  • 不需要任何漂亮的技巧,您可以使用此语法进行规范化。你只需要独立地标准化每个。所以像 self.foo = ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多