2014-03-14 2 views
1

я в настоящее время есть две моделиPass проверки по форме полей перед товарищеским Создание ID - Пользовательские

Место и продукта

Я его сконфигурировано, что, когда создается запись в моей модели производства, его создает пользовательский URL на основе информации, которую она собирается с места, выбранным в процессе создания продукта

extend FriendlyId 
friendly_id :slug_candidates, use: :slugged 

def should_generate_new_friendly_id? 
    name_changed? or location_id_changed? 
end 

def slug_candidates 
[ 
    [location.media_type, location.state, location.name, :name, :sku] 
] 
end 

то, что я в настоящее время тестирования является ш Курица пользователь решает НЕ заполнять эти очень важные поля, для того, чтобы бросить сообщение об ошибке перед созданием

validates :name, presence: true 
validates :sku, presence: true 
validates :location_id, presence: true 

Что происходит в моем случае, это то, что он упускает из вида, что валидатор и первой пытается создать слизняк. Если я удалю пользовательские атрибуты при создании URL-адреса и список как

def slug_candidates 
    [ 
    [:name, :sku] 
    ] 
end 

он будет работать нормально, сначала запустить валидаторы поля. Предполагая, что эти два являются атрибутами данной модели напрямую.

Кто-нибудь знает, почему это происходит? Мне нужно, чтобы валидаторы были выбраны первым, поскольку в нем содержится вся соответствующая информация для URL-адреса.

ответ

0

решаемые

def slug_candidates 
    if self.location_id.nil? 
     self.errors.add(:location_id) 
    else 
     [ 
      [location.media_type, location.state, location.name, :name, :sku] 
     ] 
    end 
end 
Смежные вопросы