簡體   English   中英

Rails sort_by方法(如果值不為空)

[英]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,否則返回nilfalse

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM