3

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

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

我想验证当项目分配给客户时,@user.type3.

项目.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 指南,但似乎仍然无法找到解决方案。有任何想法吗?

4

2 回答 2

5

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

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

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!强制验证的 bang 版本,该错误就会阻止保存信息。

于 2012-07-11T01:35:45.203 回答
1

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

于 2012-07-11T01:57:46.580 回答