在Rails中实现排序ASC或DESC

时间:2014-11-06 15:12:36

标签: ruby-on-rails ruby

我正在使用开源学校管理软件Fedena,我正在尝试按姓氏对用户列表进行排序。该软件目前向所有用户显示其名字。我发现这两个文件负责显示我打算更改的信息。

student_controller.rb

def list_students_by_course
@students = Student.find_all_by_batch_id(params[:batch_id], :order => 'last_name ASC')
render(:update) { |page| page.replace_html 'students', :partial => 'students_by_course' }
end

当我删除文件的上述部分时,用户名称不会显示,因此我相信此部分负责使用用户名填充表格。

_students_by_course.erb

<div class="students-table">
  <table align="center" width="100%" cellpadding="1" cellspacing="1">
    <tr class="tr-head">
      <td><%= t('sl_no') %></td>
      <td><%= t('name') %></td>
      <td><%= t('adm_no') %></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>

    <% @students.each_with_index do |r, i| %>
      <tr class="tr-<%= cycle('odd', 'even') %>">
        <td class="col-1">
          <%= i+1 %>
        </td>

        <td class="col-2">
          <%= link_to r.full_name,:controller => "student", :action => "profile", :id => r.id %>
        </td>

        <td class="col-1">
          <%= r.admission_no %>
        </td>

        <td class="col-7">
          <%=  link_to  "#{t('view_profile')}", :controller => "student", :action => "profile", :id => r.id %>
        </td>
      </tr>
    <% end %>
  </table>
</div>

我尝试过更改&#39; last_name ASC&#39; to&#39; last_name DESC&#39;但没有改变。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您在评论中澄清了您不想排序顺序(我认为你已经明白了吗?)但是全名的格式 显示模型Student的每个实例。

如果追溯到源头并不难。让我们从一个观点开始,因为那是我们所看到的。

@students.each_with_index do |r, i|

我们启动一个循环,每次循环都处理一个索引为r的条目i。由于我们在Student的集合上循环(似乎是一个有效的假设),rStudent的一个实例。有问题的一行是:

<%= link_to r.full_name,:controller => "student", :action => "profile", :id => r.id %>

实际上,我们应该只看r.full_name,因为我们得到的是链接标签。它是Student的方法。 Here it is

def full_name
  "#{first_name} #{middle_name} #{last_name}"
end

你可能想知道第二个空间在哪里,因为这样的实现暗示如果middle_name不存在,我们就有两个。查看页面的来源,您会发现实际上有两个!因此,为了更改全名的外观,您必须修改此方法。