Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails表排序不正确_Ruby On Rails_Sorting - Fatal编程技术网

Ruby on rails RubyonRails表排序不正确

Ruby on rails RubyonRails表排序不正确,ruby-on-rails,sorting,Ruby On Rails,Sorting,我有一个RubyonRails页面,我正在尝试在4列上设置可排序的标题。我曾经当过导游。我肯定我遗漏了一些小的东西,但是排序完全是对成绩和输入的字段进行的,因为它们不在相关的表中。但是,当我尝试在user和dept字段上排序时,它只按升序排序。当我在url中手动键入“desc”并发送该参数时,排序工作正常,但条件语句似乎对employee和department字段不起作用。此外,当我单击用户或部门标题时,它会在“created_at”旁边显示排序箭头,因此它似乎默认了helper函数中的某些内容

我有一个RubyonRails页面,我正在尝试在4列上设置可排序的标题。我曾经当过导游。我肯定我遗漏了一些小的东西,但是排序完全是对成绩和输入的字段进行的,因为它们不在相关的表中。但是,当我尝试在user和dept字段上排序时,它只按升序排序。当我在url中手动键入“desc”并发送该参数时,排序工作正常,但条件语句似乎对employee和department字段不起作用。此外,当我单击用户或部门标题时,它会在“created_at”旁边显示排序箭头,因此它似乎默认了helper函数中的某些内容,但我不知道它为什么这样做。有人看到代码中有什么错误吗

Index.html.erb

    <table class="table table-striped table-hover">
      <thead>
        <tr>
          <th><%= sortable "user", "Employee" %></th>
          <th><%= sortable "dept", "Department" %></th>
          <th><%= sortable "grade", "Grade" %></th>
          <th><%= sortable "created_at", "Entered" %></th>
        </tr>
      </thead>
      <tbody>
      <% @transactions.each do |transaction| %>    
          <tr>
           <td><%= link_to transaction.user.fl_name, transaction, :target => '_blank' %></td>
           <td><%= transaction.user.department.name %></td>
           <td><span class="<%= 'text-success bold' if transaction.grade >=
             90 %>"><%= transaction.grade %></span></td>
           <td><%= transaction.created_at.strftime("%b %d, %Y %l:%M %P")  %></td>
          </tr>

      <% end %>
     </tbody>
      </table>
助手方法

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, {:sort => column, :direction => direction}, {:class => css_class}
end
由于第一部分
column==sort\u column
(同样的情况也发生在
css\u class
中),因此该条件始终为false<代码>排序列检查
部门
/
用户
是否是
事务之一。列名
,由于不是,它返回在处创建的默认
,导致您的条件始终被评估为false并返回
asc
。您所要做的就是更改
排序列
,这样它就可以用于
事务。列名
用户
/
部门
。或者只是

def sort_column
  ['user', 'dept', 'created_at', 'grade'].include?(params[:sort]) ? params[:sort] : "created_at
end

在sort_column方法中,我需要这样做,因为它在用户表中找不到列:

def sort_column
(( Transaction.column_names.include?(params[:sort]) ) || 
  ( User.column_names.include?(params[:sort]) )) ? params[:sort] : "created_at"
end

我会给你答案,因为我们几乎是在同一时间回答的。我的答案中的或条件也起了作用。谢谢,我在发布我的答案之前没有看到你的答案:)
def sort_column
  ['user', 'dept', 'created_at', 'grade'].include?(params[:sort]) ? params[:sort] : "created_at
end
def sort_column
(( Transaction.column_names.include?(params[:sort]) ) || 
  ( User.column_names.include?(params[:sort]) )) ? params[:sort] : "created_at"
end