1

イベントと日付の2つのモデルを持つRailsサイトがあります

イベントには多くの日付があります

イベントはacts_as_tggable_onを使用してタグ付けされます

特定のタグでタグ付けされたイベントのすべての日付 (時系列) を検索しようとしています。タグ付けされたすべてのイベントを取得する方法はわかりますが、すべての日付を取得する方法はわかりません。

私が探している最終結果は、イベントがそれぞれの日付に表示される同様のイベントのカレンダーを作成することです。

うまくいけば、それが理にかなっています。すべての入力に感謝します!

4

1 に答える 1

1

ご存じのとおりEvents.tagged_with("my_tag")、タグに一致するイベントのリストを返します。

次に、このリストで map または collect 演算子を使用して、各イベントの日付のリストを取得できます。

`map{|e| e.dates}`

これは、日付配列のリストを返します。各配列は、によって返されたリストのインデックス内のイベントに関連付けられた日付のリストです。Events.tagged_with("my_tag")

日付順に並べ替えるには、フラット化して並べ替える必要があります。

flatten.sort{|a,b| a.created_at <=> b.created_at}

メソッド呼び出し全体を行う:

Events.tagged_with("my_tag").map{|e| e.dates}.flatten.sort{|a,b| a.created_at <=> b.created_at}

日付の名前付きスコープを使用すると、これを簡素化できます。より高速なクエリになりますが、データベースの構造について詳しく知らなければ、クエリを作成することはできません。

日付がイベントに属していると仮定すると、次のようになります。

class Date < ActiveRecord::Base
  ...
  named_scope :for_tag, lambda do |tag|
    {:joins => [:tags, :taggings], 
     :conditions => ["tags.name = ? AND tags.id = taggings.tag_id \
       AND taggings.taggable_id = dates.event_id AND \
       taggings.taggable_type = event", tag],
     :order => 'dates.created_at'}
  end  
end

Date.for_tag("my_tag")その後、はるかに効率的な SQL クエリで同じリストを実行して取得できます。

于 2009-10-21T20:32:36.093 に答える