2012-03-06 6 views
1

私は毎週のモデルでレールアプリを手に入れました。別の言い方をすれば、すべてのユーザーは月曜日の朝に週に1回生成されるモデルのインスタンス(GroceryListとしましょう)を持っています。私は簡単に、おそらく以下のように、ルビー風の構文を使用して過去のリストを参照できるように、私のGroceryListモデルにいくつかのシンタックスシュガーを統合したいと思います:Rubyクラスをタイムフレームに結びつける

current_user.grocery_list.1.week.ago 

現状では、各GroceryList項目はCREATED_ON日を持って、もちろん、週の始まり(月曜日)を示すstart_dateもあります。

このタイプの機能をルビークラスに結びつける確立された方法はありますか?もしそうなら、どのように達成できますか?

ありがとうございます。

+2

class GroceryList < ActiveRecord::Base scope :from, lambda { |date| where(:created_on => date.to_date) } end 

次に、あなたのような単純なものを使用して、任意の関係を通じて取得することができます1.week.ago) 'とそれを行うメソッドを定義する(明らかに命名はあなた次第です)? –

+0

これは何か? 'current_user.list_from(1.week.ago)' user.rbで : 'デフlist_from(タイムフレーム) list.where:私が思う(START_DATE =>タイムフレーム) end'何も、私はよそれがベストプラクティスなのかどうかは分かりません。私が採用しなければならないいくつかの明白なイディオムを無視していない限り、そのシンプルな解決策にはとても満足しています。 – Chazu

+0

IMO、日付をとり、あなたが望むものを返すメソッドを作ることは、行く方法です。 –

答えて

0

この種のものは、名前付きスコープを追加するのはとても簡単です:(current_user.grocery_list `と間違って何

current_user.grocery_list.from(1.week.ago) 
+0

これは 'def self.from(date);と同じであることに注意してください。どこで(:create_on => date.to_date);終わり。また、 'when'はキーワードなので、そのような変数名としては使用できません。 –

+0

あなたはそのキーワードについて正しいです。私はいつも、 'スコープ'宣言はクラスメソッドよりもラムダを含む場合でも有効だと思っています。なぜなら、利用可能なスコープのようなものを反映していると、より良い結果を示すからです。 – tadman

関連する問題