0

У меня есть этот метод в 3-х моделях, поэтому я хотел бы извлечь его и СУХОЙ вещи. У меня также проблема со значением по умолчанию attr. Когда поле пусто, оно будет оцениваться как пустая строка "" вместо nil, поэтому я должен написать условие в методе, чтобы избежать добавления «http» в пустую строку.Рельсы: использование одного и того же метода пользовательской проверки для нескольких моделей

Где я могу поместить метод и как его включить в модели?

Должен ли я оптимизировать метод? Если да, где и как я могу установить значение attr по умолчанию для nil (rails/db/both)?

before_validation :format_website 

def format_website 
    if website == "" 
    self.website = nil 
    elsif website.present? && !self.website[/^https?/] 
    self.website = "http://#{self.website}" 
    end 
end 

ответ

2

Вы можете поместить свой метод в приложение/модели/проблем папку, например, в качестве Validatable модуля (т.е. validatable.rb):

module Concerns::Validatable 
    extend ActiveSupport::Concern 

    def format_website 
    if website.blank? 
     self.website = nil 
    elsif !self.website[/^https?/] 
     self.website = "http://#{self.website}" 
    end 
    end 

end 

, а затем включить его в каждая модель как

include Concerns::Validatable 
+0

potashin, а затем просто позвонить из каждой модели с помощью 'before_validation: format_website'? –

+0

@SzilardMagyar: есть – potashin

+0

potashin, позвольте мне задать еще один вопрос. Является ли метод достаточно хорошим, или я должен что-то сделать с этой проблемой 'nil' vs'? '? –

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