我的网站上有一个表单,允许用户在其他用户处发送消息,但我想确保他们不能自己定制消息。
该类具有属性:username和:target_user,我只想设置一个验证,以确保在保存任何内容之前这些属性不能具有相同的值。
我认为它看起来像这样:
validates_presence_of :user_id, :username, :target_user, :message, :tag
validate :username != :target_user
但显然不知道Ruby能够正确地做到这一点。
答案 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