0

我有一个分配模型,它具有以下字段::user_id:company_id:role_id

每个用户在公司内可以有多个角色,但每个公司只能有一个角色 ID == 5 的用户。

我想做类似下面的事情(显然这不起作用)。

validates :company_id, :uniqueness => { :scope => :role_id => {:is => 5}, :message => "Only one owner is allowed." }

有没有办法以与上述类似的格式实现这一点,还是我需要创建一个自定义验证宏?

如果需要自定义验证,这将如何完成?如果需要创建一个继承自 ActiveModel::EachValidator 的新类,那么存储此代码的“正确”位置在哪里?(我是将它保存在同一个文件中还是创建一个新文件并可能将其保存在 /lib 中?)

提前致谢。

4

2 回答 2

1
validates_uniqueness_of :user_id, :scope => :company_id, :if => Proc.new{|user| user.role_id == 5 }
于 2012-05-18T12:57:09.687 回答
0

好的,我想出了一个解决方案,但不太确定它是否是这样做的“rails 方式”,或者它是否只是一种 hack-y 解决方法。有人可以纠正我吗?

我在我的 Association.rb 文件中完成了以下操作:

validate :owner_exists
.
..
...
protected
  def owner_exists
      errors.add(:role_id, " of owner already exists") if (role_id == 5 && Assignment.where('company_id = ? AND role_id = 5', company_id ).exists?)
  end
于 2012-12-09T22:21:48.747 回答