6

Rails 3.2.9 で Thinking Sphinx 2.0.13 を使用しています。

次のような STI クラスがあるとします。

class User < ActiveRecord::Base
  define_index do
    has :account_id
    has :is_deleted
  end

  sphinx_scope(:by_account) do |account_id|
    {:with => {:account_id => account_id}}
  end

  sphinx_scope(:without_deleted) do
    {:with => {:is_deleted => false}}
  end
end


class Admin < User
end

User クラスまたは Admin クラスのいずれかで単一のスコープを使用しようとすると、すべて問題ありません。予想どおり、User モデルを使用してスコープをチェーンすることもできます。問題は、管理モデルでスコープをチェーンすると、次のようになることです。

> Admin.by_account(1).without_deleted

NoMethodError:   Sphinx Query (2.9ms)  
  Sphinx  Found 3 results
  Admin Load (0.6ms)  SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('Admin') AND `users`.`id` IN (7, 8, 9)
undefined method `without_deleted' for #<ThinkingSphinx::Search:0x007fd3d95f7a08>

最初のスコープが検出されるとすぐにクエリを実行しているように見えます。私が見逃している明らかな何かがありますか、それとも TS の問題のように見えますか?

4

1 に答える 1

0

ここで問題になる可能性がある、以前に人々が抱えていたいくつかsphinx_scopesの問題があります。

  • 人々は、自分のsphinx_scopes. あなたのスコープby_accountはその最有力候補なので、名前を変更してみてください。基本クラスではなく、派生クラスでそれが台無しになる状況を想像できます。
  • 過去のスコープの問題は、呼び出しの順序を変更することで回避されてきたので、試してみてくださいAdmin.without_deleted.by_account(1)。修正ではありません、私は知っています。
  • また、それが主キーであると予測しaccount_idます(つまり、Userごとに最大 1 つAccount)。もしそうなら、これはRails時期尚早にそれを取得することを選択する理由を説明することができます.
于 2012-11-22T09:41:20.963 に答える