html - 重新排列分类显示页面中显示的专辑顺序
问题描述
好的,这会有点啰嗦,所以请耐心等待。
我的专辑索引页面显示了我所有的专辑,我可以根据创建时间等重新排序。我这样做的代码如下(只是忽略了一些东西被注释掉了,我还没有弄清楚如何做每周的最高喜欢和历史最高喜欢,但那是另一个帖子的另一个问题)
# album.rb
scope :latest, -> { order(created_at: :desc) }
#scope :weekly, -> { order(likes: :desc) }
#scope :alltime, -> { order(likes: :desc) }
def self.sort_by(sort_param)
case sort_param
when 'latest'
latest
#when 'weekly'
#weekly
#when 'alltime'
#alltime
else
latest
end
end
#album controller
def index
@albums = Album.sort_by(params[:order])
end
#album index
<table>
<tbody>
<%= link_to "Latest", albums_path(order: :latest) %><br>
<%= link_to "Weekly Top", albums_path(order: :weekly) %><br>
<%= link_to "All-Time Top", albums_path(order: :alltime) %>
</tbody
</table>
<table>
<tbody>
<% @albums.each do |album| %>
<tr>
<td><%= link_to album.name, album %></td>
<td><%= link_to image_tag(album.cover_image.variant(resize: "200x200")), album %></td>
<td><%#= album.videos #%></td>
</tr>
<% end %>
</tbody>
</table>
好的,就像我的帮助一样,一切都按预期工作,并根据选择的任何链接更改专辑索引页面中专辑的顺序……现在到我的实际问题上,我将所有专辑都绑定到一个类别。当我进入我的类别并选择一个时,它会将我带到该类别的类别显示页面并显示属于该特定类别的所有专辑,太棒了!现在我正在苦苦挣扎的是如何像在上面的专辑索引页面中那样重新排序类别显示页面中的专辑?
我尝试了几种不同的组合,但无法使其发挥作用。这是我到目前为止所拥有的
#category.rb
scope :latest, -> { order(created_at: :desc) }
#scope :weekly, -> { order(likes: :desc) }
#scope :alltime, -> { order(likes: :desc) }
def self.sort_by(sort_param)
case sort_param
when 'latest'
latest
#when 'weekly'
#weekly
#when 'alltime'
#alltime
else
latest
end
end
#category controller
def show
@categories = Category.sort_by(params[:order])
end
#category show
<table>
<tbody>
<%= link_to "Latest", categories_path(order: :latest) %><br>
<%= link_to "Weekly Top", categories_path(order: :weekly) %><br>
<%= link_to "All-Time Top", categories_path(order: :alltime) %>
</tbody
</table>
<table>
<tbody>
<% @category.albums.map.each do |album| %>
<tr>
<td><%= link_to album.name, album %></td>
<td><%= link_to image_tag(album.cover_image.variant(resize: "200x200")), album %></td>
</tr>
<% end %>
</tbody>
</table>
所以我很确定我在类别控制器部分以及我在显示页面中调用的路径都错了。
我什至不确定我是否必须将代码放在类别模型中,或者我是否能够从专辑模型中调用代码,因为我试图在类别显示页面中重新排序专辑。
对此的任何建议将不胜感激。提前致谢。
解决方案
假设这likes
是一个整数列:
为了获得本周创建的专辑和类别,您需要定义如下范围:
scope :weekly, -> { where("created_at <= ?", DateTime.current.beginning_of_the_week) }
scope :latest, -> { order(created_at: :desc) }
scope :by_likes, -> { order(likes: :desc) }
请注意,“每周”实际上并不是一个订单,而是一个过滤器。当你不应用它时,你会得到“所有的时间”。
现在在视图中您可以执行以下操作:
<%= link_to "Latest", categories_path(order: :latest) %><br>
<%= link_to "Weekly Top", categories_path(weekly: true, order: :by_likes) %><br>
<%= link_to "All-Time Top", categories_path(order: :by_likes) %>
和专辑的类比事物。
现在在控制器中您可以执行以下操作:
# categories controller
def show
@categories = Category.find(params[:id])
@albums = @category.albums
@albums = @albums.weekly if params[:weekly]
@albums = @albums.by_likes if params[:order] == "by_likes"
@albums = @albums.latest if params[:order] == "latest"
end
# albums controller
def index
@albums = Album.all
@albums = @albums.weekly if params[:weekly]
@albums = @albums.by_likes if params[:order] == "by_likes"
@albums = @albums.latest if params[:order] == "latest"
end
然后你可以@albums
像这样在类别显示视图中使用变量:
@albums.each do |album|
推荐阅读
- html - 在小屏幕上使用 div 将响应式表格布局折叠为 2 列
- python - 映射器和 reduceByKey
- mysql - 如何从行的子集中选择具有最小值的列的行?
- java - 引用外部类方法的回调对象
- python - 尝试使用 python 为该网站上的玩家抓取体育数据
- amazon-web-services - 我应该如何处理在 AWS 中调用 API 之后发生的异步进程?
- html - 停止引导表拉伸到全屏宽度并为单元格添加额外空间
- android - 从 Flutter 开始:如何让 4 个按钮填充一个 SafeArea
- java - Neo4j Java 中的事务关闭/提交问题
- c++ - 特定类型的 C++ 模板