[英]Rails sort_by method if value is not empty
因此,我有一種方法可以很好地按結果而不是數據庫列進行排序。 它將從下面的每個循環返回,其中包含針對每個記錄的值,然后根據這些記錄對表進行排序:
<% @records.sort_by(&:methodName).reverse.each do |record| %>
<%= record.methodName %>
<% end %>
這確實非常有效-但是,只有在用戶與記錄本身進行交互之后,才會使用此方法。 例如評級,那么記錄將在沒有評級的情況下開始生效,然后評級將在此之后提交。
它工作得很好,直到您創建一個沒有此排序值的新記錄-可以這樣說:“按此方法返回的內容排序,如果該記錄沒有此值,則放入它在底部”?
目前我得到一個例外,因為它不是數字'NaN'...因為它是空的:(
與往常一樣-這里的Rails初學者非常感謝任何幫助..!
嘗試這個
<% @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| %>
假設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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.