2011-04-27 5 views
0

Мне нужно проверить наличие значения, но только ПОСЛЕ того, как значение заполнено. Когда пользователь создан, не требуется устанавливать shortcut_url. Однако, как только пользователь решает выбрать shorcut_url, они не могут удалить его, он должен быть уникальным, он должен существовать.Подтвердить только в том случае, если

Если я использую validates_presence_of, так как shortcut_url не определен, Пользователь не создается. Если я использую: allowblank => true, тогда у пользователей может быть «» как shortcut_url, что не соответствует логике сайта.

Любая помощь была бы принята с благодарностью.

ответ

1

Здесь мы всегда удостоверяясь shortcut_url уникально, но мы только убедитесь, что он присутствует, если атрибут shortcut_selected установлен (или если он был установлен и теперь был изменен)

Вам необходимо протестировать, чтобы убедиться, что это хорошо работает с новыми записями.

+0

Еще ничего ... –

+0

Lying ... Выполнено неправильно. Ты победил. –

0

Попробуйте использовать параметр allow_nil вместо: allow_blank. Это предотвратит проверку пустых строк.

Редактировать: Является ли пустая строка назначаемой shortcut_url, когда пользователь создается, то? Может быть, попробовать:

class User < ActiveRecord::Base 
    validates_presence_of :shortcut_url, :allow_nil => true 

    def shortcut_url=(value) 
    super(value.presence) 
    end 
end 
+0

Нет такой удачи. Все еще не создаст пользователя ... –

+0

Я нашел некоторые сообщения об ошибках, однако, связанные с allow_nil –

0

попробовать условные валидации, что-то вроде:

validates_presence_of :shortcut_url, :if => :shortcut_url_already_exists? 
validates_uniqueness_of :shortcut_url, :if => :shortcut_url_already_exists? 

def shortcut_url_already_exists? 
    @shortcut_url_already_exists ||= User.find(self.id).shortcut_url.present? 
end 
+0

Мне понравилось ваше, но все равно ничего хорошего. Rails2.X кстати ... –

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