2010-06-11 2 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 может я передать параметры с функциями таким образом? –

+0

Я не уверен, что полностью понимаю ваш вопрос. Вы также можете передать блок, чтобы вместо этого вы делали: before_validation {| record | some_test_before_validation_method (some_arg)}, если хотите. – lambdabutz

+0

У меня есть функция, как четкости test1 (att1, ATT2) конец четкости test2 конца before_validation: test1 (att1, ATT2) ,: test2 эта работа? –

Смежные вопросы