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

时间:2012-07-11 01:30:18

标签: ruby-on-rails ruby 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

User.rb

#constants
TYPES = {
    :manager => 1,
    :contractor => 2,
    :client => 3
}

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

2 个答案:

答案 0 :(得分:5)

使用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

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

答案 1 :(得分:1)

这里只是一个指针。不要在activerecord模型中使用名为type的属性。它与rails使用STI(单表继承)的方式冲突,因为它使用type属性来确定类的子类化时的类型