2010-06-11 67 views
0
I have this code in my every model. 
Class people 
    def before_validation 
    @attributes.each do |key,value| 
     self[key] = nil if value.blank? 
    end 
    end 
end 

Now i want to put my loop in separate module. Like 
Module test 
    def before_validation 
    @attributes.each do |key,value| 
     self[key] = nil if value.blank? 
    end 
    end 
end 

And i want to call this before_validation this way 
Class people 
    include test 
    def before_validation 
    super 
    .....Here is my other logic part..... 
    end 
end 

Are there any way to do it like that in rails?? 

回答

1

您可以设置多个方法来由before_validation回调调用。因此,不是直接定义before_validation,而是在验证之前传递想要调用的方法。

module Test 
    def some_test_before_validaiton_method 
    # do something 
    end 
end 

class People < ActiveRecord::Base 
    include Test 
    def people_before_validation_foo 
    #do something else 
    end 
    before_validation :some_test_before_validation_method 
    before_validation :people_before_validaiton_foo 
end 

你可以阅读更多有关回调位置:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

@Iambdabutz我可以传递参数与功能的这种方式? – 2010-06-11 19:56:26

+0

我不确定我完全理解你的问题。您也可以传递一个块,然后执行:before_validation {| record | some_test_before_validation_method(some_arg)}如果你想。 – lambdabutz 2010-06-11 20:00:10

+0

我有这样 高清测试1(ATT1,ATT2) 结束 高清test2的 结束 before_validation功能:TEST1(ATT1,ATT2),: TEST2 是这项工作? – 2010-06-11 20:08:48