如何设置Rails验证以确保两个属性不能具有相同的值?

时间:2010-07-06 05:03:35

标签: ruby-on-rails validation

我的网站上有一个表单,允许用户在其他用户处发送消息,但我想确保他们不能自己定制消息。

该类具有属性:username和:target_user,我只想设置一个验证,以确保在保存任何内容之前这些属性不能具有相同的值。

我认为它看起来像这样:

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

validate :username != :target_user

但显然不知道Ruby能够正确地做到这一点。

2 个答案:

答案 0 :(得分:5)

使用您的验证在顶部:

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 :(得分:1)

使用validate

def validate
  if self.username == self.target_user
    self.errors.add :base, "You can't send message to yourself."
  end
end