我有两个数据库表,一个叫做“Recipes”,另一个叫“Likes”。
当我在我的网站上列出我的食谱时,我可以轻松地通过食谱表中的一列来订购它们。例如,在以下日期创建它们:
<% @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订购食谱?
如果您需要其他信息,如配方控制器或型号,请告知我们。
谢谢!
答案 0 :(得分:1)
你应该看看http://guides.rubyonrails.org/association_basics.html#counter-cache
基本上,在名为recipes
的{{1}}表中添加一个新的整数列,然后编辑likes_count
模型,如下所示:
Like
然后Rails会在必要时自动更新它,您只需按该列排序:
class Like < ActiveRecord::Base
belongs_to :recipe, counter_cache: true
end
答案 1 :(得分:0)
我会去@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_count