加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby / Active Record:自定义排序顺序

发布时间:2020-12-17 03:49:20 所属栏目:百科 来源:网络整理
导读:我正在研究rails 3.2 ruby?? 1.9.2项目. 我从经典数据库中获取了一些值: designators = Model.find() 我用(简化代码)显示它: table class="rwy_modes_table" cellspacing='0' % designators.each do |info_design| % tr id="rwy_mode_%=info_design.id%" t
我正在研究rails 3.2 ruby?? 1.9.2项目.

我从经典数据库中获取了一些值:

designators = Model.find()

我用(简化代码)显示它:

<table class="rwy_modes_table" cellspacing='0'>
  <% designators.each do |info_design| %>
    <tr id="rwy_mode_<%=info_design.id%>">
      <td class="spacer"><%= info_design.try(:designator) %></td>
    </tr>
  <% end %>
</table>

值例如是:3L,3C,3R. (左为L,中心为C,右为4).
我想订购的价值如:3L,3R而不是3C,3L,3R

我不知道如何定义这个自定义订单.任何的想法 ?

解决方法

尝试这样的事情:

(app/models/designator.rb)
# determines the sort value for based on my_attribute.
# designators should be in the order 'l','c','r' - regardless of any preceeding numeral
def sort_val
  return 0 if self.my_attribute =~ /l/i
  return 1 if self.my_attribute =~ /c/i
  return 2 if self.my_attribute =~ /r/i
end

(app/helpers/designators_helper.rb)
def sorted_designators(designators)
  designators.sort{|a,b| a.sort_val <=> b.sort_val }
end

您可以在视图中进行排序的位置

(app/views/...)
sorted_designators(designators).each do |design|

或者,您可以将其移动到模型文件中的静态方法,以便在视图外部进行排序

(app/models/designator.rb)
def self.sorted_designators(designators)
  designators.sort{|a,b| a.sort_val <=> b.sort_val }
end

并像这样在你的控制器中使用它们

app/controllers...
@designators = Designator.sorted_designators(designators)

注意:这是内存中的排序,因此请注意O(n)db查询,具体取决于您对此对象的排序/访问方式

另请参阅:https://stackoverflow.com/a/14282353/811255使用Comparable模块(可能是更清洁的解决方案)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读