我有模型项目和模型统计数据。
Item
has_many :stats
Stat
belongs_to :items
在模型(例如mysql表)Stat中有3个字段: 评分 skin_id ITEM_ID
因此,对于Stat,它可能是,如:
@item.stats => Array of stats for records with item_id = 1, with a differer skin_id
我需要按照“评级”为给定的skin_id排序所有项目。
类似的东西:
@items = Item.all.order('stats[currtnt_skin.id] DESC') (of course it doesn't work)
换句话说,我需要在数组中进行排序:
@stats = @items.stats[current_skin.id]
@items.order (... by @stats ...)
怎么做?
答案 0 :(得分:5)
首先,我假设belongs_to :items
你的意思是belongs_to :item
(单数),因为存在item_id
外键。
其次,要解决您的特定查询,您可以使用:
Stat.where(:skin_id => skin_id).joins(:item).order("items.rating DESC")
但是,如果skin_id
引用另一个模型 - 即Stat belongs_to :skin
和Skin has_many :stats
,那么从那里开始可能更有意义:
skin = Skin.find(1)
stats = skin.stats.order("rating DESC").includes(:item)
要获取项目,然后循环浏览它们:
stats = skin.stats.order("rating DESC").includes(:item)
stats.each do |stat|
stat.item
end
˚F
答案 1 :(得分:1)
@items = Item.join(:stats).order('skin_id DESC')
我相信,虽然我可能会错误地认为加入表格会对您定义的关联有所帮助。
答案 2 :(得分:0)
在rails 3中它将是:
Item.includes(“stats”)。order(“stats.skin_id desc”)
答案 3 :(得分:0)
你试过这个吗?
Item.includes("stats").where('stats.skin_id = ?', 1).order("stats.rating desc")