fra*_*hez 4 ruby ruby-on-rails-3
我正在研究rails 3.2 ruby 1.9.2项目.
我从经典数据库中获取了一些值:
designators = Model.find()
Run Code Online (Sandbox Code Playgroud)
我用(简化代码)显示它:
<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>
Run Code Online (Sandbox Code Playgroud)
值例如是: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
Run Code Online (Sandbox Code Playgroud)
您可以在视图中进行排序的位置
(app/views/...)
sorted_designators(designators).each do |design|
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其移动到模型文件中的静态方法,以便在视图外部进行排序
(app/models/designator.rb)
def self.sorted_designators(designators)
designators.sort{|a, b| a.sort_val <=> b.sort_val }
end
Run Code Online (Sandbox Code Playgroud)
并像这样在你的控制器中使用它们
app/controllers...
@designators = Designator.sorted_designators(designators)
Run Code Online (Sandbox Code Playgroud)
注意:这是内存中的排序,因此请注意O(n)db查询,具体取决于您对此对象的排序/访问方式
另请参阅:https : //stackoverflow.com/a/14282353/811255以使用Comparable模块(可能是更清洁的解决方案)
| 归档时间: |
|
| 查看次数: |
3693 次 |
| 最近记录: |