0

我正在制作排序功能以对用户列表进行排序。此排序功能旨在根据属性(列)进行排序。用户模型有一列 company_id 但我不想按数字排序,我想按公司名称排序。顺便提一句,

公司:has_many 用户

用户:属于公司

这是我的 index.html.erb:

<table class="pretty" border="1" cellpadding="10">  
  <tr>
    <th></th>
    <th><%= sortable "name" %></th>
    <th><%= sortable "email" %></th>
    <th><%= sortable "company_id" %></th>
    <th>DELETE</th>
  </tr>  

  <% for user in @users %>  
  <tr class="<%= cycle('oddrow', 'evenrow') -%>">
    <td><%= gravatar_for user %></td>
    <td><%= link_to user.name, user %></td>
    <td><%= user.email %></td>
    <td><%= user.company.name unless user.company_id.blank? %></td>
    <td><% if current_user.admin? || ( ( current_user.developer? && !current_user?(user) ) && (user.boss_id == current_user.id) ) %>
      || <%= link_to "delete", user, method: :delete,
                              data: { confirm: "You sure?" } %>
        <% end %></td>
  </tr>
  <% end %>
</table>
<%= will_paginate @users %>

这是来自 application_helper.rb 的可排序函数:

def sortable(column, title = nil)  
    title ||= column.titleize
    css_class = (column == sort_column) ? "current #{sort_direction}" : nil
    direction = (column == sort_column && sort_direction == "asc") ? "desc" : "asc"  
    link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
end

这是 users_controller.rb:

helper_method :sort_column, :sort_direction
def index
    @users = User.where(:developer => false, :admin => false).search(params[:search]).order(sort_column + ' ' + sort_direction).paginate(:per_page => 10, :page => params[:page])
end

private
def sort_column
  User.column_names.include?(params[:sort]) ? params[:sort] : "name"
end

def sort_direction
  %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end

那么,如何修改它以便按 Company.name 而不是 User.company_id 排序?

4

1 回答 1

0

我通过更改和更改解决了<%= sortable "company_id" %>这个<%= sortable("name", "Company") %>问题

User.column_names.include?(params[:sort]) ? 参数[:排序]:“名称”

(( User.column_names.include?(params[:sort]) ) || ( Company.column_names.include?(params[:sort]) )) ?参数[:排序]:“名称”

于 2013-09-02T11:32:45.927 回答