10

現在、タグ付けにAct_as_taggable_onを使用し、Rails3アプリケーションでpostgresqlデータベースを検索するためにpg_searchを使用しています。

act_as_taggable_on gemによって生成されたタグをpg_searchで検索するにはどうすればよいですか?「Post.find(1).tag_list」と言うことで投稿のタグを表示できますが、Postテーブルに「タグ」列がないため、

 pg_search_scope :search_by_weight, :against => {:tag_list => 'A', :title => 'B', :content => 'C'} #,:using => [:tsearch => {:prefix => true}] #:trigram, :dmetaphone]

Post.tag_list列がPostテーブルに存在しないため、エラーが発生します。ドットコネクタ(つまり、mission.tag_list)を介して値を見つけることができるが、それがテーブルに存在しない場合、それは何と呼ばれますか?何をタイプしたらいいのかわからなかった。では、基本的に、存在しない列をparamsとして渡すにはどうすればよいですか?

また、あなたは私がコメントアウトしたことに気づいたかもしれません

 :using => [:tsearch => {:prefix => true}] #:trigram, :dmetaphone]

その上。Postgresql用の追加モジュールをインストールする方法が見つからないようです。どこにCREATEEXTENSIONと入力しますか?(ubuntu11.10とpostgresql9.1.3->およびherokuを本番環境に使用)

4

3 に答える 3

9

はるかに単純なアプローチは、次のように行われる pg_search を介して関連付けと検索を使用することです。

class Item < ActiveRecord::Base
 include PgSearch  

  pg_search_scope :full_search, 
    :against => {  
    :item_status => 'A',
    :title => 'B',
    :description => 'C'    
   },       
    :associated_against => {
    :tags => [:name]    
   }
end 

これを自分のプロジェクトの 1 つに実装したところ、うまく機能しました (タグ名で検索しました)。残念ながら、アイテムテーブルに「タグ」列が見つからないと表示されているため、関連する関係を重み付けする方法がわかりません。

于 2012-05-24T21:16:49.550 に答える
1

数年前に plpgsql で実装を書きました。私のブログを参照してください

于 2012-05-19T17:09:10.673 に答える