many_to_many关系中的map方法

时间:2012-08-13 15:26:45

标签: ruby-on-rails ruby activerecord

我的应用程序中有以下3个模型:

class Submission < ActiveRecord::Base
 has_many :linkedsubmissions
end

class Linkedsubmission < ActiveRecord::Base
  belongs_to :submission
  has_many   :lnksubtypes
end


class Lnksubtype < ActiveRecord::Base
  belongs_to :linkedsubmission
end

在下面的代码中,“@submission.linkedsubmissions.lnksubtypes”不正确。

@history = Audit.find(:all, :conditions => ["auditable_id IN (?)",@submission.linkedsubmissions.lnksubtypes.map{|b| b.LSU_ID} ])

我需要在@ submission.linkedsubmissions.lnksubtypes

中找到'auditable_id'的所有审核

3 个答案:

答案 0 :(得分:1)

您需要将以下has_many关系添加到Submission模型。

class Submission < ActiveRecord::Base
 has_many :linkedsubmissions
 has_many :lnksubtypes, :through => :linkedsubmissions
end

现在,您将能够像这样重新格式化您的查询

@history = Audit.find(:all, :conditions => ["auditable_id IN (?)", @submission.lnksubtypes.map(&:LSU_ID) ])

答案 1 :(得分:1)

Audit.find(:all, :conditions => ["auditable_id IN (?)",@submission.linkedsubmissions.map{|b| b.lnksubtypes.map{&:LSU_OID) }.flatten ])

但是应该有一种更好的方法来使用sql获取那些LSU_OID。

答案 2 :(得分:1)

@history = Audit.where(:auditable_id => @submission.lnksubtypes.map(&:LSU_ID))

略短