2012-04-30 4 views
0
  1. 1つのレコード人物Aが、私達のデータベース内の異なるレコードが人物Bが贈り物を与える周波数を追跡
  2. 者Bに贈り物を与える周波数を追跡(私用)
  3. もう1つのレコードは、人物Aが人物Cに何かを与える頻度を追跡します。
  4. 人物Cは人物Aに何も与えていないので、そのレコードはありません。
  5. このパターンに、Aが関係を与えている、または受け取っている50人のパターンを掛けます。

usersテーブルには 'ID' と '名前'私達のデータベースでのRails 3アプリケーションでのデータベースクエリ

贈り物表は 'giver_id' と 'receiver_id' い

profile_picturesは 'user_idの' と 'picture_url'

Userモデルを持っていました。

has_one :profile_picture 
has_many :gifts 

ProfilePicture:

belongs_to :user 

ギフトモデル:

belongs_to :user 

私は一度、データベースから配列を引っ張ってトラブルを抱えています。配列は名前でアルファベット順に並べる必要があります。私はで始まった:

parties = Gift.where("giver_id = ? || receiver_id = ?", current_user.id, current_user.id) 

そして、逆に働こうとしました。プロフィール画像を含むすべてのユーザーにGiftsアレイをマップさせようとしました。私はその仕事をすることができませんでした。

ありがとうございました。

UPDATE:テストデータの 現在の結果:私は必要なもの

Clower, Steve 
Gallipert, Jay 
Gallipert, Erin 
Gallipert, Jay 
Gallipert, Jay 
Gallipert, Linda 
Gallipert, Jay 
Gallipert, Erin 
Gallipert, Jay 
Garrent, Kara 
Gallipert, Jay 
Atkal, Andrew 
Gallipert, Jay 
Dystrom, Paul 
Gallipert, Jay 
Clower, Steve 
Gallipert, Linda 
Gallipert, Jay 
Garrent, Kara 
Gallipert, Jay 

Atkal, Andrew 
Clower, Steve 
Dystrom, Paul 
Gallipert, Erin 
Gallipert, Jay 
Gallipert, Linda 
Garrent, Kara 

これを行うための唯一の方法は

  1. にある場合、私は思ったんだけどすべての名前を1つの配列にダンプする
  2. ルビー
  3. プロフィール画像に使用量の

答えて

1
class Gift 
    belongs_to :giver, :foreign_key => "giver_id", :class_name => "User" 
    belongs_to :receiver, :foreign_key => "receiver_id", :class_name => "User" 
end 

gifts = Gift.where("giver_id = :id OR receiver_id = :id",:id => current_user.id).includes(:giver => :profile_picture).order('users.name').includes(:receiver => :profile_picture) 
# gifts sorted by giver name 
# users and profile picture are included in gifts array 

例得るためにソートされた配列を使用してデータベースを再照会:

gifts.each do |gift| 
    gift.giver.name # giver name 
    gift.giver.profile_picture.picture_url # giver picture url 
    gift.receiver.name # receiver name 
    gift.receiver.profile_picture.picture_url # receiver picture url 
end 

がUPDATE:テストデータ用

は、このコードを試してみてください:

gifts = Gift.select('giver_id,receiver_id').uniq.includes(:giver => :profile_picture,:receiver => :profile_picture) 
gifts.sort!{|x,y| "#{x.giver.name} #{x.receiver.name}" <=> "#{y.giver.name} #{y.receiver.name}"} 
gifts.each{|g| puts "#{g.giver.name}, #{g.receiver.name}"} 

出力:

Atkal, Andrew 
Clower, Steve 
Dystrom, Paul 
Gallipert, Erin 
Gallipert, Jay 
Gallipert, Linda 
Garrent, Kara 

非常に優雅ですが、かなり速いです。たぶん誰かがSQLで贈り物を並べ替える手助けをするかもしれません

+0

こんにちは、nyaa ...ありがとう! +1これは私がこれまでに得たよりもはるかに近いです。しかし、私はリスト全体をアルファベット順に並べる必要があります。例えばジェイ(受信者)、ニヤ(贈呈者)、ラルフ(贈呈者)。私たちが両面をアルファベット順に並べた1つの配列にすると、うまくいくでしょう。 – Jay

+0

@Jay、1つのギフト:jay(贈呈者)、nyaa(受信者)、second gift:nyaa(贈呈者)、jay(受信者)。どのようにアルファベット順にする必要がありますか? :) – nyaa

+0

明確にするのに役立つ更新情報を参照してください。 – Jay

関連する問題