首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails "order_by“关联表

Rails "order_by“关联表
EN

Stack Overflow用户
提问于 2014-01-14 21:42:05
回答 2查看 93关注 0票数 1

我有两个数据库表,一个叫"Recipes“,另一个叫”Like“。

当我在我的网站上列出我的食谱时,我可以很容易地按食谱表格中的一列对它们进行排序。例如,根据它们的创建日期:

代码语言:javascript
运行
复制
<% @recipes.order("created_at desc").limit(16).each do |i| %>
  <% if i.live? %>
    <%=link_to image_tag(i.image(:fixed), :class => "newest-recipes"), i %>
  <% end %>
<% end %>

我真正想做的是根据他们的点赞数量对他们进行排序。要在食谱页面上显示点赞数量,我使用以下代码:

代码语言:javascript
运行
复制
<%= @recipe.likers.count %>

有没有办法通过@recipe.likers.count对食谱进行排序?

如果您需要其他信息,如配方控制器或模型,请让我知道。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-01-14 22:54:38

你应该看看http://guides.rubyonrails.org/association_basics.html#counter-cache

基本上,向recipes表添加一个名为likes_count的新整数列,然后编辑Like模型,如下所示:

代码语言:javascript
运行
复制
class Like < ActiveRecord::Base
  belongs_to :recipe, counter_cache: true
end

然后,Rails会在必要时自动更新它,您可以只按该列进行排序:

代码语言:javascript
运行
复制
@recipes.order(:likes_count)
票数 1
EN

Stack Overflow用户

发布于 2014-01-14 23:07:31

我会选择@Ju Liu答案(+1)。但是,如果无法将新列添加到现有表中,则可以在Recipe模型中创建一个作用域:

代码语言:javascript
运行
复制
class Recipe < ActiveRecord::Base
  has_many :likes
  scope :likes_count,
    select("recipes.id, ANY_OTHER_COLUMN_YOU_NEED_HERE, count(likes.id) AS likes_count").
    joins(:likes).
    group("recipes.id").
    order("likes_count DESC")
end

@recipes = Recipe.likes_count
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21115023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档