4

私は2つのモデルを持っています

class Group < AR
  has_many :permissions
  accepts_nested_attributes_for :permissions, :allow_destroy => true
end

class Permission < AR
  validates_uniqueness_of :action, :scope => [:role]
end

新しいグループを作成するときに、更新時にのみ機能するアクセス許可に関する一意の制約を取得できないようです。出力例を次に示します。ネストされた属性と一意の制約で検証を機能させるための最良の方法を知っている人はいますか?

サンプル出力

> g = Group.create(:permissions_attributes => [{:role => 'admin', :action => 'one'}])
> # Now add the same permissions, should not be valid
> g.permissions_attributes = [{:role => 'admin', :action => 'one'}]
> g.valid?  # => false

それが予想されます。ただし、同じ permissions_attributes でグループを 2 回作成しても、無効にはなりません。

> g = Group.new(:permissions_attributes => [{:role => 'admin', :action => 'one'}, {:role => 'admin', :action => 'one'}]
> g.valid?  # => true        BUT THIS SHOULD BE FALSE!!
> g.save # => true           Oh Nos!!!
4

1 に答える 1

0
class Group < AR
  has_many :permissions
  accepts_nested_attributes_for :permissions, :allow_destroy => true
  validates_associated :permissions
end
于 2011-03-22T19:18:03.923 に答える