ruby /事件记录 : custom sorting order

标签 ruby ruby-on-rails-3

我正在开发一个 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、3C、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

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

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

或者,您可以将其移动到模型文件中的静态方法,以便在 View 外轻松排序

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

并像这样在你的 Controller 中使用它们

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

注意:这是内存中排序,因此根据您排序/访问此对象的方式观察 O(n) 数据库查询

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

关于 ruby /事件记录 : custom sorting order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25484167/

相关文章:

sql - ActiveRecord Hash 形式表示 update_all ("prio = prio + 200")

ruby - 如何在 Ruby 中执行此操作?

ruby-on-rails - 特殊字符的验证

ruby-on-rails-3 - Bootstrap-datetimepicker-rails

ruby-on-rails - 带参数的redirect_to。如何将它们传递给我?

ruby-on-rails - 如何在运行rails控制台时手动设置ENV变量

Ruby 空格字符不等于空格字符

jquery - twitter-bootstrap-rails 未捕获的 TypeError/$ 不是函数

ruby-on-rails - 为什么 Nokogiri 会给我多个结果?

ruby-on-rails-3 - 在 Rails 中,您可以忽略运行中的特定测试吗?