我有一个Project
模型和一个User
模型。一个项目必须有一个客户端(用户类),所以 Project
模型有一个 client_id
外键。
User
模型有一个 type
属性,如果用户是客户端,它将包含 3
。
我想验证当项目分配给客户时,@user.type
是 3
。
项目.rb
validates :client_id, presence: true, #@user.type must be 3
belongs_to :client, :class_name => User, :foreign_key => :client_id
用户.rb
#constants
TYPES = {
:manager => 1,
:contractor => 2,
:client => 3
}
不确定如何进行验证。我通读了有关验证的 Rails 指南,但似乎仍然无法找到解决方案。有什么想法吗?
最佳答案
使用inclusion
验证助手。 Docs here
这是文档中的一个简单示例
class Coffee < ActiveRecord::Base
validates :size, :inclusion => { :in => %w(small medium large),
:message => "%{value} is not a valid size" }
end
编辑:
好的,我明白你的意思了。不要为此使用验证助手,手动执行。
# somewhere in your model (don't be tempted to put this in your controller)
def assigning_client
if @user.type == 3
# do the assignment
else
errors.add(:base, :message => "User must be a client")
end
end
只要您使用 bang 版本 save!
强制验证,该错误就会阻止信息被保存。
关于ruby-on-rails - Rails 模型验证以检查属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424322/