0

ブログがuser_idを介してUserに属するテーブルがあります。

私はthinkingsphinxを使用してブログのインデックスを作成していますが、ユーザーが現在アクティブになっているブログ(user.status = User :: ACTIVE)のインデックスのみを作成したいと考えています。

インデックスを作成するための以下のコードがありますが、「where」句が間違っていることはわかっています。それはどうあるべきですか?

define_index do
    indexes title
    indexes body

    where "user.status = '#{User::ACTIVE}'"
end

更新:whereメソッドがSQLコードをデータベースエンジンに渡すだけであることがわかります。これはJOINのコードを渡すことで実行できるように見えますが、JOINステートメントを自分で作成するのに十分なSQLがわかりません。

2番目の更新:SQLをいじり回すと、JOInはWHEREの前に移動する必要があるようです。そのため、誰かがよく知っていない限り、SQLコードを使用してこれを行うことはできません。

4

4 に答える 4

1

おそらく、ユーザーを試してみてください(テーブル名は複数形です)

define_index do
    indexes title
    indexes body

    # Use this line, if status is numeric
    where "users.status = #{User::ACTIVE}"

    # ... and this one, if it's a string
    where "users.status = '#{User::ACTIVE}'"
end

結局、あなたはマニュアルを見たいと思うかもしれません。

于 2010-01-16T23:41:53.673 に答える
0

スフィンクスについてはよくわかりませんが、暗闇の中でのショットです。

users.status = '#{User::ACTIVE}'
于 2010-01-16T23:13:34.773 に答える
0

シンキング スフィンクスがブログ テーブルとユーザー テーブルに確実に参加するようにするには、おそらくダミーの属性が必要なだけです。スキーマの詳細を知らなくても、次のようなことを試してください。

define_index do
    indexes title
    indexes body
    has user(:id), :as => :user_id

    where "users.status = '#{User::ACTIVE}'"
end
于 2010-01-17T00:46:31.077 に答える
0

whereこの条項がこれをサポートしているとは思えません。バックグラウンドで SQL に追加していますが、Rails の関連付けにはアクセスできません。別の方法として、ブログ レコードにステータス フィールドを追加することもできますが、これはユーザーによって異なります。

まず、ステータス フィールドをブログ テーブルに追加します。次に、これをユーザー モデルに追加します。

before_save :update_blog_status

protected

def update_blog_status
  self.blog.update_attribute(:status, self.status)
end

これにより、ブログのステータスが自動的に更新されます。1 人のユーザーが has_many のブログを持っているかどうかはわかりませんでした。その場合は、それに応じてこのコードを調整してください。

次に、ブログ インデクサーを適切な where 句で更新します。

define_index do
  indexes title
  indexes body

  where "status = '#{User::ACTIVE}'"
end

必要なのはそれだけです:)

于 2010-01-17T03:18:43.740 に答える