2011-02-05 4 views
1
Subscriber 
has_and_belongs_to_many :skills. 

Skill 
has_many :positions 

ActiveRecordの条件と命名スコープ - subscriber.rbで未定義のメソッド `のcreated_at」

scope :notify_today, 
     includes(:skills => :positions). 
     where("positions.created_at > ? AND positions.created_at > ?", 
      1.day.ago, self.created_at) 

は基本的に私はポジション1を持っているすべての加入者を)見つけたい1.day.agoを作成し、2)加入者の後に作成

答えて

5

ここでselfのクラスはClassであり、Subscriberではないため、エラーが発生します。

ソリューションとして、あなたはこのようにラムダを作ることができるとcreated_atのパラメータを渡す: (私は特にあなたスコープのコードでこれをテストしていないので、私は、あなたのスコープがそうでなければ働いていると推定)

scope :notify_today, 
     lambda { |created_at| includes(:skills => :positions). 
     where("positions.created_at > ? AND positions.created_at > ?", 
      1.day.ago, created_at) } 

そして、それを使用します。

@subscribers = notify_today(Time.now) 
+0

おかげZabba。それは非常に教育的だった。 2行目の "警告:ブロックパラメータの複数の値"というメッセージが表示されます。私はそれを無視すべきですか? –

+0

ラムダ用のparamsを定義していて、スコープ内でそれを使用していないか、スコープが呼び出されている場所でparamを渡していない場合に起こります。 – Zabba

+0

実際、私の問題は解決されませんでした。基本的に私は、1)作成した1.day.agoと2)サブスクライバの後に作成したすべてのサブスクライバを検索したい。 –

関連する問題