我有两个数据库表,一个叫"Recipes“,另一个叫”Like“。
当我在我的网站上列出我的食谱时,我可以很容易地按食谱表格中的一列对它们进行排序。例如,根据它们的创建日期:
<% @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 %>我真正想做的是根据他们的点赞数量对他们进行排序。要在食谱页面上显示点赞数量,我使用以下代码:
<%= @recipe.likers.count %>有没有办法通过@recipe.likers.count对食谱进行排序?
如果您需要其他信息,如配方控制器或模型,请让我知道。
谢谢!
发布于 2014-01-14 22:54:38
你应该看看http://guides.rubyonrails.org/association_basics.html#counter-cache
基本上,向recipes表添加一个名为likes_count的新整数列,然后编辑Like模型,如下所示:
class Like < ActiveRecord::Base
belongs_to :recipe, counter_cache: true
end然后,Rails会在必要时自动更新它,您可以只按该列进行排序:
@recipes.order(:likes_count)发布于 2014-01-14 23:07:31
我会选择@Ju Liu答案(+1)。但是,如果无法将新列添加到现有表中,则可以在Recipe模型中创建一个作用域:
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_counthttps://stackoverflow.com/questions/21115023
复制相似问题