17

スコープにアクセスしているときにこのエラーが発生します。

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

この問題を理解して修正するように私を導いてください。

4

2 に答える 2

29

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

Rails は潜在的な結果を結果に追加しようdefault_scopeとして失敗につながると思います。

次のようにします。

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

  def self.login
    logins.first
  end
于 2012-09-11T07:55:21.863 に答える
0

スコープの 1 つが を返していたため、このエラーが発生しましたself。代わりnilに、期待される結果を達成しました。例えば:

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

もしids.present? false を返し、条件は nil を返し、スコープは効果がありませんが、チェーン可能です。

于 2013-04-10T15:29:10.537 に答える