Rails模型验证以检查属性的值

And*_*Bas 3 ruby ruby-on-rails ruby-on-rails-3

我有一个Project模型和一个User模型.项目必须具有客户端(用户类),因此Project模型具有client_id外键.

User模型有一个type属性,将包含3如果用户是一个客户端.

我想验证,当一个项目被分配给客户端,这@user.type3.

Project.rb

validates :client_id, presence: true, #@user.type must be 3
belongs_to :client, :class_name => User, :foreign_key => :client_id
Run Code Online (Sandbox Code Playgroud)

User.rb

#constants
TYPES = {
    :manager => 1,
    :contractor => 2,
    :client => 3
}
Run Code Online (Sandbox Code Playgroud)

不确定如何进行验证.我阅读了有关验证的rails指南,但似乎仍无法获得解决方案.有任何想法吗?

Dty*_*Dty 5

使用inclusion验证助手.文档在这里

这是文档中的一个简单示例

class Coffee < ActiveRecord::Base
  validates :size, :inclusion => { :in => %w(small medium large),
    :message => "%{value} is not a valid size" }
end
Run Code Online (Sandbox Code Playgroud)


编辑:

好的,我明白你的意思了.不要为此使用验证帮助程序,请手动执行.

# 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
Run Code Online (Sandbox Code Playgroud)

只要您使用save!强制验证的爆炸版本,该错误将阻止保存信息.