Ruby on Rails单模型实现按分类展示书籍列表求助
解决方案
你可以通过Rails的group_by方法实现按分类分组展示,完全不需要额外创建模型。
第一步:修改控制器
把index方法的代码改成按section字段分组:
def index @books_by_section = Book.all.group_by(&:section) end
group_by会返回一个哈希结构,键是分类名称,对应的值是该分类下所有书籍的数组。
第二步:编写视图代码
在index.html.erb中编写以下代码:
<% @books_by_section.each do |section_name, books| %> <strong><%= section_name %></strong> <ul> <% books.each do |book| %> <li><%= "#{book.title},#{book.author}" %></li> <% end %> </ul> <% end %>
这样就能实现你想要的效果:每个分类名称作为标题,下方列出对应分类的书籍和作者。
额外小提示:如果担心分类名称存在大小写不统一(比如"小说"和"小说")导致分组混乱,可以在Book模型里加个回调统一格式:
class Book < ApplicationRecord validates :section, :title, :author, presence: true before_save :normalize_section private def normalize_section self.section = section.strip.downcase.capitalize end
内容的提问来源于stack exchange,提问作者Brandon Sullivan
相关产品推荐
相关产品推荐

