View rails视图按不同类别排序模型

View rails视图按不同类别排序模型,view,ruby-on-rails-4,controller,params,View,Ruby On Rails 4,Controller,Params,在我的艺术家索引中,我有一段代码,允许用户搜索艺术家,然后页面将只显示结果,而不是所有艺术家 <%= form_tag(artists_path, :method => "get", id: "search-form") do %> <%= text_field_tag :search, params[:search], placeholder: "Search Artists" %> <%= submit_tag "Search",

在我的艺术家索引中,我有一段代码,允许用户搜索艺术家,然后页面将只显示结果,而不是所有艺术家

<%= form_tag(artists_path, :method => "get", id: "search-form") do %>
      <%= text_field_tag :search, params[:search], placeholder: "Search Artists" %>
      <%= submit_tag "Search", :name => nil %>
<% end %>

但现在我想在我的视图中添加按钮,以按其他类别进行排序,例如最高平均分数、大多数评论等。做这件事的最佳方式是什么,类似于我做表单的方式,因此,当他们单击链接时,它将在控制器中的索引中插入一个参数并重新加载页面?

首先,让我们稍微重构一下此代码并添加更改:

class Article < ActiveRecord::Base
  scope :search, ->(keyword) {where('name ilike ?', "%#{keyword.titleize}%") if search.present?}
end

def index
  params[:order] =  params[:search] ? :created_at : (params[:order] || :name)
  @artists = Artist.search(params[:search]).order("#{order_column} DESC")
end
在您的视图中,如果显示列名,则在每个列名旁边显示一个用于排序的箭头,单击该箭头可将该列的排序切换为desc或asc;如果视图中没有列名,则添加一个带有列名的“选择”下拉列表,并在更改后提交表单:

<%= form_tag(artists_path, :method => "get", id: "search-form") do %>
  <%= text_field_tag :search, nil, placeholder: "Search Artists" %>
  <%= select_tag :order, options_for_select([ ['Created At', :created_at],  ['Name', :name ], :name) %> 
  <%= submit_tag "Search", :name => nil %>
<% end %>

可能是您要筛选搜索结果的选项,可以作为选择选项提供,并且在选择筛选选项后单击搜索时,它也可以发送到控制器的索引方法,并显示基于该方法的结果。我将实现一个只搜索艺术家姓名的基本搜索和一个包含更多选项的高级搜索。在高级搜索中,您可以使用下拉菜单、滑块或其他任何工具轻松搜索任何特定内容。所有参数都将发送到控制器。但是,我不会在索引操作中实现高级搜索功能。我更喜欢使用模块、关注点或普通的旧ruby对象来保持控制器的精简。
<%= form_tag(artists_path, :method => "get", id: "search-form") do %>
  <%= text_field_tag :search, nil, placeholder: "Search Artists" %>
  <%= select_tag :order, options_for_select([ ['Created At', :created_at],  ['Name', :name ], :name) %> 
  <%= submit_tag "Search", :name => nil %>
<% end %>