Это то, что вы хотите использовать для полиморфных ассоциаций (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")