2012-11-13 11 views
6

Rings 3.2.9で思考型スフィンクス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 

私は、ユーザーまたは管理クラスのいずれかに単一のスコープを使用しようとすると、すべての罰金です:

は、私が持っているとこのようになりSTIクラスを考えます。また、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の問題のように見えますか?

+0

ユーザークラスには、is_deletedという名前のdbフィールドがありますか?ブール型で? – Lichtamberg

+0

@Lichtamberg - ええ、列はそこにあり、ブール値です。どちらのスコープも自分自身でうまく動作します。 – Codebeef

+0

Admin.by_account(1)をコンソールに挿入すると応答を表示できますか? – Lichtamberg

答えて

0

ここに問題がある可能性があるsphinx_scopesを使用する前の人々の問題があります。

  • sphinx_scopesの名前の競合に問題が見つかりました。あなたのスコープby_accountがその候補の第一候補ですので、名前を変更してみてください。派生したクラスではうんざりしますが、ベースクラスではうんざりする状況を想像することができます。
  • 過去のスコープの問題は、呼び出しを並べ替えることで回避されていますので、Admin.without_deleted.by_account(1)を試してみてください。修正ではありません。
  • また、account_idが主キー(つまり、User/Account)であると予測します。もしそうなら、これはなぜRailsが時期尚早にフェッチするのかを説明することができます。
関連する問題