2014-11-06 104 views
0

我正在使用一个开源的学校管理软件Fedena,我试图按照他们的姓氏对用户列表进行排序。该软件当前显示所有用户的名字。我发现这两个文件负责显示我打算改变的信息。在Rails中实现排序ASC或DESC

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> 

我试图改变 '姓氏ASC' 到 '姓氏DESC',但什么都没有改变。 任何帮助表示赞赏。

+0

什么版本的rails? – Anthony 2014-11-06 15:17:22

+0

你在这里没有真正问过问题,所以我不确定你说的是什么问题。我推断你目前有ASC排序并希望DESC排序,但它没有改变? “学生”模型是否有一个默认范围定义在它上面,用于强制排序? – lurker 2014-11-06 15:24:27

+0

@Anthony我安装了Rails 2.3.5版本的Ruby 1.8.7。 – n3rve 2014-11-06 15:37:50

回答

1

你澄清在不是你想要排序顺序的意见(我想你已经想通了这一点?),但格式为模型Student的每个实例显示全名

跟踪源代码并不难。让我们从一个观点开始,因为这就是我们所看到的。

@students.each_with_index do |r, i| 

我们开始一个循环,每次迭代其中的进程与索引i条目r。由于我们正在循环收集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不存在,我们就会有两个。看看页面的来源,你会发现实际上有两个!所以为了改变全名的外观,你必须修改这个方法。

+0

非常感谢您提供具体的答案,@ D-side。最初,我跳过了枪,并通过在“models \ students.rb”中用last_name替换first_name的每个实例来完成此工作,但稍后将这些更改逆转并根据您的指示更新文件,并且按预期工作。谢谢:) – n3rve 2014-11-07 00:36:40

+0

我不知道这应该是一个单独的问题,但我可能只是坚持评论,因为它是相关的:虽然它按预期工作,列表根据他们的ID排序(序列号。 )。我想用#{last_name}对它们进行排序。有没有简单的方法来实现这一点? – n3rve 2014-11-07 00:39:14

+0

@ students.sort_by(&:姓氏) – AlexChaffee 2014-11-07 00:56:47

相关问题