Пользовательские проверки с моделью: не удалось сохранить - PullRequest
0 голосов
/ 19 декабря 2010

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

У меня есть модель сообщения.

p = Post.find(1)
p.title = "This is the Title of this Article"
p.url_title = "this-is-the-title-of-this-article--created-by-user-name"

При создании сообщения я создаю: url_title на основе заголовка.Вот как я отключаю его в базе данных, а не выставляю идентификаторы, которые также являются скучными и не описательными.

Я строю это: url_title в before_save, поэтому я не могу просто использовать 'validates_uniqueness_of'потому что похоже, что проверки выполняются до того, как сработает before_save, и для проверки есть: url_title.

Итак, я должен убедиться, что: url_title уникален.Я добавляю «--created-by - # {p.user.name}», чтобы разрешить многократное использование одного и того же заголовка разными пользователями.

Итак, мне нужно иметьпользовательская проверка, которая подтверждает, что: url_title является уникальным для базы данных перед сохранением и, если он не уникален, вызывает и сообщает об ошибке и информирует пользователя.

Мысли о наилучшем способе сделать это?«

Ответы [ 3 ]

2 голосов
/ 19 декабря 2010

Вы можете переместить обратный вызов с before_save на before_validation (см. здесь ).Этот обратный вызов будет выполняться при создании и обновлении действия, поэтому я думаю, что этого будет достаточно для ваших нужд.

1 голос
/ 19 декабря 2010

Используйте это, чтобы создать url_title

before_validation_on_create :create_url_title

....

private

def create_url_title
  url_title = .....
end

Затем добавьте правильную проверку в url_title

validate_uniqueness_of :url_title, :message => "This title is taken, please choose a different title"
0 голосов
/ 19 декабря 2010

Просто добавьте

validates_uniqueness_of :url_title

в вашем посте модель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...