如何连接此模型关联belongs_to_through和belongs_to?

时间:2012-06-19 04:19:12

标签: ruby-on-rails-3.2 model-associations

以下是我的模特:

**Resource**
has_many :users, :through => :kits
has_many :kits

**User**
has_many :resources, :through => :kits
has_many :kits

**Kits**
belongs_to :resource
belongs_to :user

应用程序中的用户可以通过单击向其工具包添加资源。然后我可以找出用户执行的资源:

@user.resources

现在,用户还可以提交资源以供审批。我想跟踪哪个用户提交了哪个资源。我该怎么做才能做到以下几点:

资源控制器

def create
current_user.resources.create(params[:resource])
end

我希望能够做到这样的事情:

@user.submitted_resources.count

1 个答案:

答案 0 :(得分:1)

给定具有以下关联的模型(以及必要的表,列等):

**Resource**
has_many :users, :through => :kits
has_many :kits
belongs_to :submitter, class_name: "User"

**User**
has_many :resources, :through => :kits
has_many :kits
has_many :submitted_resources, class_name: "Resource", foreign_key: "submitter_id"

**Kits**
belongs_to :resource
belongs_to :user

请注意has_many :submitted_resources, class_name: "Resource", foreign_key: "submitter_id"模型上添加的User。这假设Resources表上有一个名为submitter_id的列(您说已添加)。添加此关联后,您可以使用User方法(即User#submitted_resources)引用@user.submitted_resources.count提交的所有资源。

我还在belongs_to :submitter, class_name: "User"模型中添加了Resource关联,这样可以轻松引用创建记录的User,但没有必要完成您的要求。