【问题标题】:rails 3 table complicated sortingrails 3 table 复杂排序
【发布时间】:2016-10-30 04:16:54
【问题描述】:

我正在制作一个排序功能,以便对用户列表进行排序。此排序功能旨在根据属性(列)进行排序。用户模型有一列 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 排序?

【问题讨论】:

    标签: sorting ruby-on-rails-3.2 html-table


    【解决方案1】:

    我通过将&lt;%= sortable "company_id" %&gt; 更改为&lt;%= sortable("name", "Company") %&gt; 并更改来解决了这个问题

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多