質問

これは私の最初のポートスタックで、皆さんが思いずれかに違反しプロトコルです。

私はプロジェクトに取り組んでいるレール(2.1.2、私は関係のシナリオは以下のようなものです:

event [has_many] days

人(カテゴリー)で申し込むことができたイベントの日は、以下の結合結果

category [has_many] customers [has_many] orders [has_many] days  
[belongs_to] event

現在、たいと思っていますの総数のイベント"のお客様は、お客様にとって特定のカテゴリーで、私が滞っております。AFAIKありませんの便索を通してオブジェクトの配列ですよね?では、どのソリューション入れ子ループおよび収集方法は、"イベントの日"を受注

れば教えてください私は不明である。

おります。

役に立ちましたか?

解決

私の個人的な使用をMySQLのです。わからないんだと思うんでのスピードその他の例を使用してレールを提供会方法

ということは、お客様のモデルになにができるようなもの:(注しているところと仮定してご利用のデフォルトのキー協会:'model_name_id')

class Customer
  def events
    Event.find_by_sql("SELECT DISTINCT e.* FROM events e, days d, orders o, customers c WHERE c.id=o.customer_id AND o.id=d.order_id AND e.id=d.event_id")
  end
end

るすべてのイベントに関連するユーザーは、複製の異なる'キーワードを確認しますのです。ま、上記の例は、紛失に関する情報は何日間のユーザーが署名した。が必要な場合はその情報をおっしゃってください。

また、まだ含まれば、お部門モデルがっていき対応います。なぜひ意見を聞かせてほしい。

編集:

んだといをカウントします。しかできないもの高速化(または少なくとも、メモリの集中をカウントです。が、以下の機能:

def event_count
  Event.count_by_sql(SELECT DISTINCT COUNT(e.*) FROM ... ... ...
end

他のヒント

あなたのモデルは、おそらく次のようになります:

class Category
  has_many :customers

class Customer
  has_many :orders
  has_many :days, :through => :orders # I added this
  belongs_to :category

class Order
  has_many :days
  belongs_to :customer

class Day
  belongs_to :event
  belongs_to :order

class Event
  has_many :days

これを使用すると、顧客のためにイベントをカウントすることができます:

events = customer.days.count(:group => 'event_id')

それはこのようにOrderedHash返されます:

#<OrderedHash {1=>5, 2=>13, 3=>0}>

次の方法でイベントを数える得ることができます

events[event_id]

events[1] # => 5
events[2] # => 13
etc.

あなたがしたい場合uniqのイベントの総数ます:

events.size # => 3

カテゴリ内のすべての顧客のためのイベントをカウントする場合、私はこのような何かをしたいです

events = {}
category.customers.each {|c| events.merge!(c.days.count(:group => 'event_id') ) }
events.size # => 9 - it should be total number of events

しかし、この場合には、各イベントの登場回数の情報が失われます。

私はこれをテストしていない、ので、いくつかのミスがあるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top