2015-05-28 2 views
0

Можно ли вызвать метод в «validate_uniqueness»Вызов метода в validate_uniqueness в Rails

У меня есть столбец с именем «profile_url», который должен быть уникальным для всех пользователей. Я проверяю его уникальность с помощью

validates_uniqueness_of :profile_url, message: "has already been taken" 

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

+0

перенаправление на метод? где? в контроллере? в модели? – Surya

+0

в модели .............. –

+1

Нет. Невозможно перенаправить метод, если проверка не выполняется. Однако вы можете использовать обратный вызов 'after_validation' и проверить наличие ошибок на объекте. – Surya

ответ

0
validates_uniqueness_of :profile_url, message: "has already been taken", if: :method_name? 

Эта проверка будет срабатывать только в том случае, если метод возвращает true.

+0

Huuh. Вы читаете неправильный вопрос, как я ..: P OP хочет обратное. –

+0

Вы можете либо проверить внутри контроллера, если хэш-код ошибки включает ключ «profile_url», а затем перенаправить на ваш желаемый метод. –

2

Вы, вероятно, хотите использовать пользовательскую проверку, как это:

class User 
    validate :verify_unique_profile_url 

    def verify_unique_profile_url 
    if User.exists? profile_url: profile_url 
     errors.add :profile_url, 'has already been taken' 
    end 
    end 
end 

Более подробную информацию можно найти here.

+0

Да. Пользовательская проверка является хорошим предложением здесь. –

+0

Ваше состояние не будет работать, если существующий пользователь попытается отредактировать свои настройки/proile. Это должно быть 'User.exists? (Profile_url: profile_url) && self.new_record?' – Surya

+0

@Surya Эта проверка должна, вероятно, также запускаться, когда пользователь обновляет 'profile_url'. В этом случае ваше предложение «пропустит» проверку. То, что вы, вероятно, имеете в виду, заключается в том, что нужно добавить проверку, чтобы увидеть, существует ли файл profile_url в вашей собственной записи 'User'. – newmediafreak

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