rails accepts_nested_attributes_for и валидации ... Rails 2.3.11 - PullRequest
4 голосов
/ 22 марта 2011

У меня две модели

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 дважды, это не делает недействительным:

> 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!!!

1 Ответ

0 голосов
/ 22 марта 2011
class Group < AR
  has_many :permissions
  accepts_nested_attributes_for :permissions, :allow_destroy => true
  validates_associated :permissions
end
...