2012-09-11 13 views
16

スコープにアクセスする際にこのエラーが発生します。ここで未定義のメソッド `default_scoped? 'スコープにアクセス中

ARモデル

class StatisticVariable < ActiveRecord::Base 
    attr_accessible :code, :name 

    has_many :statistic_values 

    scope :logins, where(code: 'logins').first 
    scope :unique_logins, where(code: 'unique_logins').first 
    scope :registrations, where(code: 'registrations').first 

end 

であると私はStatisticVariable.loginsまたは任意の他のスコープにしようとすると、それが得られます。

NoMethodError: undefined method `default_scoped?' 

私はクラスメソッドとしてスコープを設定した場合、それは完璧に動作します。

def self.registrations 
    where(code: 'registrations').first 
end 

この問題を理解して修正してください。

答えて

27

あなたのいわゆるscopesはスコープではありません。チェーンできません。

私はRailsがあなたの結果に潜在的な可能性を追加しようとしていると思います。これは失敗につながります。

ような何かを:私のスコープのいずれかが、私は関係オブジェクト(動作しませんでした)であったと仮定selfを返していましたので、私はこのエラーを得た

scope :logins, where(code: 'logins') 
    scope :unique_logins, where(code: 'unique_logins') 
    scope :registrations, where(code: 'registrations') 

    def self.login 
    logins.first 
    end 
+0

ああ、ありがとう! 'default_scope order:" foo "'を 'default_scope {{order:" foo "}}'に変更するときにこれを得ました。 'default_scope {order(" foo ")}'に変更することで修正しました。 –

0

。代わりにnilを返すと、期待される結果が得られました。例:

scope :except_ids, -> ids do 
    if ids.present? 
    ids = ids.split(',') if ids.respond_to?(:split) 
    where('id not in (?)', ids) 
    end 
end 

if ids.present? falseを返すと、条件はnilを返し、スコープは効果を持ちませんが、連鎖可能です。

関連する問題