0
  1. 我们数据库中的一条记录跟踪了 A 向 B 赠送礼物的频率。
  2. 我们数据库中的另一条记录跟踪人 B 向人 A 赠送礼物的频率。
  3. 另一条记录跟踪人 A 向人 C 提供某物的频率。
  4. 由于 C 从未向 A 提供过任何东西,因此没有任何记录。
  5. 将该模式乘以与 A 有给予和/或接受关系的 50 个人。

用户表有 '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. 将所有名称转储到一个数组中
  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 回答