Как установить проверку Rails, чтобы два атрибута не могли иметь одинаковое значение? - PullRequest
2 голосов
/ 06 июля 2010

У меня есть форма на моем сайте, которая позволяет пользователям направлять сообщения другим пользователям, но я хочу убедиться, что они не могут направлять сообщения самим себе.

Класс имеет атрибуты: username и: target_user, и я просто хочу установить проверку, которая проверяет, чтобы эти атрибуты не могли иметь одинаковое значение, прежде чем что-либо будет сохранено.

Я подумал, что это будет выглядеть примерно так:

validates_presence_of :user_id, :username, :target_user, :message, :tag

validate :username != :target_user

Но явно не знаю достаточно Ruby, чтобы сделать это правильно.

Ответы [ 2 ]

5 голосов
/ 06 июля 2010

Наверху с вашими проверками:

validate :username_does_not_equal_target

и затем личным / защищенным методом в коде вашей модели:

def username_does_not_equal_target
  @errors.add(:base, "The username should not be the same as the target user") if self.username == self.target_user
end

ИЛИ, чтобы прикрепить ошибку к определенному атрибуту:

def username_does_not_equal_target
  @errors.add(:username, "should not be the same as the target user") if self.username == self.target_user
end

Вы можете изменить текст сообщения об ошибке или название метода.

, чтобы узнать больше об ошибках: http://api.rubyonrails.org/classes/ActiveRecord/Errors.html, чтобы узнать больше о проверках:http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

Надеюсь, это поможет, удачного кодирования!

1 голос
/ 06 июля 2010

Использование подтверждение

def validate
  if self.username == self.target_user
    self.errors.add :base, "You can't send message to yourself."
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...