2011-01-06 5 views
0

Назначение: Название: струнные Разрешение: user_id: целое число, subject_class: струнные, subject_id: целое, действие: строкадополнительные требования has_many

Назначение has_many: права доступа,: foreign_key =>: subject_id Но как мне сделать что он знает о требовании subject_class == self.class.to_s?

Обновление: Использование: conditions => {: subject_class => 'Assignment'}, как я могу обеспечить, когда я делаю permissions.new: subject_class также установлен.

ответ

0

Это то, что вы хотите использовать полиморфные ассоциации для (http://wiki.rubyonrails.org/howtos/db-relationships/polymorphic)

В модели уступки, вы должны сделать следующее:

has_many :permissions, :as => :subject 

А в модели разрешенийдиалоговых вы могли бы сделать это:

belongs_to :subject, :polymorphic => true 

Однако, вам нужно переименовать subject_class поле для subject_type для того, чтобы это работало в неявном виде. Когда все это будет сделано, у вас будет все, что вы просили бесплатно с Rails. Вам не нужно передавать: subject_type, когда вы создаете новое разрешение. Вы можете создать такое разрешение, и: Subject_type будет автоматически заполняться для вас:

assignment = Assignment.create(:title => "My Assignment") 
permission = Permission.create(:subject => assignment, :action => "read", :user => current_user) 

- or - 

assignment.permission.create(:user => current_user, :action => "read") 
Смежные вопросы