0

アプリケーションには次の 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」を持つすべての監査を見つける必要があります

4

3 に答える 3

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) ])
于 2012-08-13T15:50:04.503 に答える
1
Audit.find(:all, :conditions => ["auditable_id IN (?)",@submission.linkedsubmissions.map{|b| b.lnksubtypes.map{&:LSU_OID) }.flatten ])

しかし、これらの LSU_OID を sql のみで取得するより良い方法があるはずです。

于 2012-08-13T15:50:25.563 に答える
1
@history = Audit.where(:auditable_id => @submission.lnksubtypes.map(&:LSU_ID))

少し短い

于 2012-08-13T16:58:20.477 に答える