0

次のフィールドを持つ割り当てモデルがあります: :user_id:company_id:role_id

各ユーザーは会社内で複数の役割を持つことができますが、各会社は role_id == 5 を持つユーザーを 1 人だけ持つことができます。

以下のようなことをしたいと思います(明らかにこれは機能しません)。

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

わかりました、私は解決策を思いつきましたが、それがこれを行うための「レールの方法」なのか、それともハック的な回避策なのかはよくわかりません。誰かがこれについて私を修正してもらえますか?

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 に答える