選択の多くを通じて多くような...
-
21-08-2019 - |
質問
これは私の最初のポートスタックで、皆さんが思いずれかに違反しプロトコルです。
私はプロジェクトに取り組んでいるレール(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
しかし、この場合には、各イベントの登場回数の情報が失われます。
私はこれをテストしていない、ので、いくつかのミスがあるかもしれません。