我有模型项目和模型统计数据。
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 ...)
怎么做?
最佳答案
首先我假设 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
关于ruby-on-rails - 如何在给定值内按关联模型排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6534739/