次のコードを実行して、コントローラーで検索を実行したいと思います。
専門家_コントローラー.erb
@users = User.text_search(params[:query]).has_skill_categories(params[:skills]).has_marketing_assets(params[:marketing_platforms])
アプリを実行すると、次のエラーが表示されます。
PG::SyntaxError: ERROR: subquery has too many columns
LINE 1: ...S pg_search_rank FROM "users" WHERE "users"."id" IN (SELECT...
pg_search を使用する text_search メソッドを削除すると、計画どおりに動作します。
@users = User.has_skill_categories(params[:skills]).has_marketing_assets(params[:marketing_platforms])
エラーが発生する理由と修正方法を教えてください。
これが私のコードです。
ユーザーモデル - user.erb
include PgSearch
pg_search_scope :search, against: [:first_name, :last_name, :company, :description, :job_title, :website, :email, :country, :city, :state],
using: {tsearch: {dictionary: 'english'}}
def self.text_search(query)
if query.present?
search(query)
else
User.all
end
end
def self.has_marketing_assets(platforms)
if platforms.present?
where{users.id.in(User.joins{marketing_assets}.where((['marketing_assets.marketing_platform_id = ?' ] * platforms.count).join(' OR '), *platforms).group{users.id}.having{{marketing_assets => {COUNT(DISTINCT(marketing_assets.marketing_platform_id)) => platforms.count }}})}
else
User.all
end
end
def self.has_skill_categories(skills)
if skills.present?
where{users.id.in(User.joins{my_skills}.where((['my_skills.skill_id = ?' ] * skills.count).join(' OR '), *skills).group{users.id}.having{{my_skills => {COUNT(DISTINCT(my_skills.skill_id)) => skills.count }}})}
else
User.all
end
end