额外的has_many要求

时间:2011-01-06 02:13:48

标签: ruby-on-rails activerecord

作业:标题:字符串 权限:user_id:integer,subject_class:string,subject_id:integer,action:string

分配has_many:permissions,:foreign_key => :subject_id 但是我如何确保它知道subject_class == self.class.to_s要求?

更新:使用:conditions => {:subject_class => 'Assignment'},我如何确保何时执行权限。新的:subject_class也已设置。

1 个答案:

答案 0 :(得分:0)

您希望对(http://wiki.rubyonrails.org/howtos/db-relationships/polymorphic

使用多态关联

在您的作业模型中,您将执行以下操作:

has_many :permissions, :as => :subject

在你的Permission模型中,你会这样做:

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")