我正在使用Rails进行“黑胶唱片收集”应用。我的目标是学习如何使用Ruby on Rails。
我有主应用程序正在运行。我使用了rails g scaffold record artist:string title:string publisher:string tracks:text year:integer
,一切正常。
我也设计了它,现在是时候添加一些不错的功能......;)
我想添加几个按钮以不同方式订购记录列表(index.html.erb)。一个按钮,按字母顺序查看,按照记录标题查看,按年查看,...
但我真的不知道如何去做。我试图在谷歌搜索,但我甚至不确定要寻找什么。是sort_by吗?它排序吗?是吗。订单?我应该使用Rails还是使用jQuery? = /
我认为我可以使用sort来排序,例如按年份排序:
@records.sort! { |a,b| a.year <=> b.year }
但我如何显示更改?如何通过单击按钮使其工作?
如何根据点击的按钮更新视图?
我非常感谢你能给我的任何帮助。
谢谢! =)
答案 0 :(得分:3)
使用.sort
或.sort_by
或来自Enumerable的任何方法可能会导致性能下降并导致内存问题。
要在Ruby中排序,您需要先从数据库中加载所有记录,然后将它们加载到内存中,然后重新排序数组。当您构建一个小玩具应用程序时,此功能正常,但对于具有数千条记录的应用程序,这将很快使服务器瘫痪。
相反,您希望使用.order
@newest = Record.order(year: :desc).limit(100)
# SELECT records.* FROM records ORDER BY year DESC LIMIT 100
添加要使用查询参数的过滤,排序或搜索查询。您不需要更改现有路由,因为rails会将请求URL中的任何查询参数添加到params哈希。
class RecordsController
# ...
# GET /index
# GET /index?order=[year, artist, title]
def index
@records = Record.all
if params[:order].in? %w[year artist title]
# adds ORDER to the scope
@records.merge!( Record.order("? DESC", params[:order]) )
end
end
end
我应该使用Rails还是使用jQuery?
我建议你先学习如何建立古典&#34; Rails中的同步Web应用程序。这本身就足够了。
一旦了解了基本面,就重新访问ajax。
要创建链接以对结果进行排序:
<p>Sort by:
<%= link_to "Year", records_path(order: 'year') %>,
<%= link_to "Artist", records_path(order: 'artist') %>,
<%= link_to "Title", records_path(order: 'title') %>
</p>
答案 1 :(得分:0)
我使用了很多@max写的代码就是答案。 不得不改变它以使它工作。
在我的records_controller.rb
上使用以下代码结束def index
@records = Record.order(:artist)
if params[:order] == 'artist'
@records = Record.all.order('artist')
elsif params[:order] == 'title'
@records = Record.all.order('title')
elsif params[:order] == 'year'
@records = Record.all.order('year')
else
@Records = Record.all
end
end
也许有一天这可以帮助别人......;)