2014-07-10 74 views
0

的ActiveRecord的validates_each方法支持多種屬性:通屬性的ActiveRecord before_validation

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的網址。我希望在應用驗證之前對它們進行「規範化」(如果它缺少,則添加「http://」以開始)。

+1

你想訪問哪個參數? 'self.name'應該返回新名稱或舊名稱; 'self.changes [:name] .try(:first)'應該返回新名稱,如果它改變了,'self.changes [:name] .try(:last)'將返回舊名稱,如果更改 – MrYoshiji

回答

0

我不認爲它接受多個參數,但你可以有多個驗證調用相同的方法。

before_validation :foo, :do_something 
before_validation :bar, :do_something 
before_validation :baz, :do_something 
+0

How是':do_something'中引用的第一個參數(例如':foo')? – craig

0
before_validation :do_something 

protected 
    def do_something 
    #do something here 
    end 
end 

This documentation法術出來很清楚。

+0

我讀過。不過,我希望有人可能有一個漂亮的竅門。 – craig

+0

沒有必要的訣竅,你可以正常使用這種語法很好。你只需要獨立地規範化。所以就像self.foo =? –