0
  1. 私たちのデータベースの1つのレコードは、人物Aが人物Bに贈り物をする頻度を追跡します。
  2. 私たちのデータベースの別のレコードは、人物Bが人物Aに贈り物をする頻度を追跡します。
  3. 別のレコードは、人物Aが人物Cに何かを与える頻度を追跡します。
  4. 人物Cは人物Aに何も与えたことがないので、その記録はありません。
  5. そのパターンに、Aが関係を与えたり受けたりしている50人を掛けます。

usersテーブルには「id」と「name」があります

ギフトテーブルには「giver_id」と「receiver_id」があります

profile_picturesには「user_id」と「picture_url」があります

ユーザーモデル:

has_one :profile_picture
has_many :gifts

プロフィールの写真:

belongs_to :user

ギフトモデル:

belongs_to :user

データベースからアレイを一度プルするのに問題があります。配列は名前でアルファベット順に並べる必要があります。私は始めました:

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

そして、逆方向に作業しようとしました。プロフィール写真を含むすべてのユーザーを取得して、Gifts配列にマップしようとしました。私はそれを機能させることができませんでした。

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

更新:テストデータの現在の結果:

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. Rubyで配列を並べ替える
  3. ソートされた配列を使用してデータベースを再クエリし、プロファイル画像を取得します
4

1 に答える 1

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

アップデート:

テストデータについては、次のコードを試してください。

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でギフトを並べ替えるのを手伝ってくれるかもしれません。

于 2012-05-01T07:01:04.483 に答える