所以我有一个方法,我用它来排序结果而不是数据库列,目前效果很好。它将从每个循环的下面返回一个值,对每条记录,然后根据这些对表进行排序:
<% @records.sort_by(&:methodName).reverse.each do |record| %>
<%= record.methodName %>
<% end %>
这非常有效 - 但是此方法仅在用户与记录本身交互后才会使用。例如,如评级,那么记录将在没有评级的情况下开始生活,然后在此之后提交评级。
它工作得很好,直到你创建一个没有值的新记录来排序 - 有没有办法说“按这个方法返回的方式排序,如果记录没有值这个,把它放在底部“?
目前我得到一个例外,因为它不是一个数字'NaN'...因为它是空的:(
一如既往 - 任何帮助Rails初学者都非常感激......!
答案 0 :(得分:3)
试试这个
<% @records.sort_by{|r| r.try(:methodName)}.reverse.each do |record| %>
编辑:
<% @records.sort_by{|r| r.methodName.nan? ? 10000 : r.methodName}.reverse.each do |record| %>
答案 1 :(得分:3)
假设methodName
始终存在(作为方法),并在值存在时返回Numeric,否则返回nil
或false
:
@records.sort_by{ |r| r.methodName || -9999999 }
这将导致所有没有条目的记录位于reverse
之前的列表的开头,以及之后的列表末尾。
如果这不起作用,请说明methodName
返回新记录的内容。
或者,你可以这样做:
newrs, oldrs = @records.partition{ |r| r.methodName }
newrs.each do |r| ... records that have a value for methodName ... end
oldrs.each do |r| ... records with no value for methodName ... end