Я разрабатываю с Rails 3.2.8 Я хочу преобразовать эту сортировку в область Rails.Сортировка по виртуальному атрибуту в Rails
class Doc < ActiveRecord::Base
has_many :denotations
def same_sourceid_denotations_count
denotation_doc_ids = Doc.where(:sourceid => self.sourceid).collect{|doc| doc.id}
Denotation.select('doc_id').where('doc_id IN (?)', denotation_doc_ids).size
end
end
class Denotation < ActiveRecord::Base
belongs_to :doc
end
анс сортировка, как показано ниже
@docs = docs.sort{|a, b| b.same_sourceid_relations_count <=> a.same_sourceid_relations_count}
Я написал объем ниже, но не работает.
scope :same_sourceid_docs_denotations_count
select('docs.*, docs.sourceid = docs.sourceid AS same_sourceid_doc_ids, COUNT(denotations.doc_id IN (same_sourceid_doc_ids)) AS same_sourceid_docs_denotations_count')
.group('docs.id')
.order('same_sourceid_docs_denotations_count DESC')
У вас есть ошибка.
PG::Error: ERROR: missing FROM-clause entry for table "denotations"
LINE 1: ...d = docs.sourceid AS same_sourceid_doc_ids, COUNT(denotation...
^
: SELECT docs.*, docs.sourceid = docs.sourceid AS same_sourceid_doc_ids, COUNT(denotations.doc_id IN (same_sourceid_doc_ids)) AS same_sourceid_docs_denotations_count FROM "docs" WHERE "docs"."sourcedb" = 'PubMed' GROUP BY docs.id ORDER BY same_sourceid_docs_denotations_count DESC LIMIT 10 OFFSET 0
.group('docs.id')
.order('same_sourceid_docs_denotations_count DESC')
Этот шаг сортировки ниже
- Найти все документы, которые имеет тот же SourceId и получить эти идентификаторы.
- Обозначения графы, которые имеют doc_id в идентификаторах выше.
Сортировка документов по количеству обозначений выше.
< Док ID: 1, SourceId: 111 >
< Doc ID: 2, SourceId: 111 >
< Обозначение ID: 1, DOC_ID: 1 >
< Обозначение ID: 2, DOC_ID: 2 >
< Обозначение ID: 3, DOC_ID: 2 >
=> кол денотаций, связанных с SourceId 111 должно быть 3< Док ID: 3, SourceId: 222 >
< обозначении ID: 4, DOC_ID: 3 >
=> кол денотаций, связанных с SourceId 222 должно быть 1
Любые идеи?
Спасибо за ваш ответ :) На самом деле, количество обозначений - это все обозначения, которые имеют doc_id в docs.id, которые имеют одинаковый исходный код. Обратитесь к шагу сортировки, который я добавил. – DIGITALSQUAD