[英]Rails - Postgresql - Full text search - Railscasts 343
[英]PostgreSQL error when grouping and search with full text search in SmartListing Gem
我在rails應用程序中使用smartgisting gem和postgresql。 該表顯示了一個關聯結果的元素列表,在某些情況下元素可以重復,但是我需要在表中只顯示該元素一次,但是當我將DISTINCT或uniq添加到活動記錄時,它會轉換為數組和智能列表顯示和錯誤。 然后我嘗試使用gruop解決它,它的工作原理! 但是當我嘗試使用pg_scope進行全文搜索時,pg查詢崩潰了。 這里的代碼:
class Prospect < ActiveRecord::Base
include PgSearch
pg_search_scope :search_by_name,
against: [:name, :father_last_name, :mother_last_name],
associated_against: { user: [:first_name, :father_last_name,
:mother_last_name] },
ignoring: :accents
has_many :projects, through: :project_prospects, dependent: :destroy
.
.
.
class User < ActiveRecord::Base
has_many :project_prospect
has_many :projects, through: :user_projects, dependent: :nullify
end
查詢
search = User.find(id).prospects.select("prospects.*").group("prospects.id")
search = search.search_query("Say my name") if search_full_text.present?
該組用於刪除活動記錄中的重復項,但是當需要全文搜索時,我會收到下一個錯誤
PG::GroupingError: ERROR: column "pg_search_ece0055f6ad1de91cd168e.rank" must appear in
the GROUP BY clause or be used in an aggregate function
LINE 1: ...168e.pg_search_id GROUP BY prospects.id ORDER BY pg_search_...
在數小時后搜索此問題的唯一解決方案是在全文搜索后創建組,並在SELECT中向查詢添加名為“rank”的變量,如下所示:
search = User.find(id).prospects
if search_full_text.present?
search = search.search_query("Say my name")
.select("prospects.*").group("prospects.id, rank")
else
search = search.select("prospects.*").group("prospects.id")
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.