0

私は Rails 3.2.8 で開発しており、複数のリレーション カウントの合計でモデルを注文したいと考えています。

多くの subcatrel と subinsrel を持つ Doc モデルがあり、どちらも Relation モデル (モデル リレーションではなく、'Relation' という名前のモデル) です。

doc.rb

class Doc < ActiveRecord::Base
  has_many :denotations
  has_many :instances, :through => :denotations
  has_many :subcatrels, :class_name => 'Relation', :through => :denotations, :source => :subrels
  has_many :subinsrels, :class_name => 'Relation', :through => :instances, :source => :subrels
  scope :pmdocs, where(:sourcedb => 'PubMed')
  .
  .
end

count subcatrels と subinsrels の合計で Doc モデルを注文したいと思います。

スコープpmdocsを注文するために以下を試しました。

Doc.pmdocs.includes([:subcatrels, :subinsrels]).group('docs.id').order('(count(subcatrels.id) + count(subinsrels.id)) DESC')

そして、以下のエラーが発生しました。

PG::Error: ERROR:  missing FROM-clause entry for table "subcatrels"
LINE 1: SELECT  DISTINCT "docs".id, (count(subcatrels.id) + count(su...

: SELECT  DISTINCT "docs".id, (count(subcatrels.id) + count(subinsrels.id)) AS alias_0 FROM "docs" LEFT OUTER JOIN "denotations" ON "denotations"."doc_id" = "docs"."id" LEFT OUTER JOIN "relations" ON "relations"."subj_id" = "denotations"."id" AND "relations"."subj_type" = 'Denotation' LEFT OUTER JOIN "denotations" "denotations_docs_join" ON "denotations_docs_join"."doc_id" = "docs"."id" LEFT OUTER JOIN "instances" ON "instances"."obj_id" = "denotations_docs_join"."id" LEFT OUTER JOIN "relations" "subinsrels_docs" ON "subinsrels_docs"."subj_id" = "instances"."id" AND "subinsrels_docs"."subj_type" = 'Instance' WHERE "docs"."sourcedb" = 'PubMed' GROUP BY docs.id ORDER BY (count(subcatrels.id) + count(subinsrels.id)) DESC LIMIT 10 OFFSET 0

count subcatrels と subinsrels の合計で Doc モデルを注文する方法は?

他のモデルのソース コードは次のとおりです。

denotation.rb

class Denotation < ActiveRecord::Base
  belongs_to :doc
  has_many :instances, :foreign_key => "obj_id", :dependent => :destroy
  has_many :subrels, :class_name => 'Relation', :as => :subj, :dependent => :destroy
  has_many :objrels, :class_name => 'Relation', :as => :obj, :dependent => :destroy
  .
  .
end

インスタンス.rb

class Instance < ActiveRecord::Base
  belongs_to :obj, :class_name => 'Denotation'
  has_many :subrels, :class_name => 'Relation', :as => :subj, :dependent => :destroy
  has_many :objrels, :class_name => 'Relation', :as => :obj, :dependent => :destroy
  .
  .
end

協会画像 ここに画像の説明を入力

4

1 に答える 1

0

subinsrels.idテーブル名でないとin を求めることはできませんWHERE!

于 2013-07-24T11:05:31.367 に答える