按钮上的订单内容点击Rails

时间:2016-10-27 07:33:10

标签: jquery ruby-on-rails sorting

我正在使用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 }

但我如何显示更改?如何通过单击按钮使其工作?

如何根据点击的按钮更新视图?

我非常感谢你能给我的任何帮助。

谢谢! =)

2 个答案:

答案 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

也许有一天这可以帮助别人......;)