<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
此代碼顯示作爲ASC訂購的集合,但我想將此集合訂購爲DESC。以DESC訂購集合
我該如何做到這一點?
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
此代碼顯示作爲ASC訂購的集合,但我想將此集合訂購爲DESC。以DESC訂購集合
我該如何做到這一點?
更好的是,你可以設置一個範圍來排序你的事件並在渲染中使用它。
在你的事件模型:
scope :desc, order("events.event_at DESC")
如果使用Rails3中,在你看來,你可以簡單地做:
<%= render @events.desc %>
根據您擁有的對象類型,您將有不同的排序功能。
如果你的對象是一個ActiveRecord,你可以做到這一點通過以下方式:
@events.order('events.event_at DESC')
您從數據庫中檢索他們面前這一個ORDER
條款添加到您的SQL查詢,排序項。
第二種解決方案比較慢,因爲您在紅寶石中排序條目。
但是,如果您操縱的是一組對象,那麼這是您唯一的解決方案。
@events.sort {|a,b| b.event_at <=> a.event_at }
通過所有的事件時,這將循環,檢查最大的一個與<=>
方法他們中的每一個。
您還可以在Enumerables上看到the sort documentation。
對不起,但我是一個新手在紅寶石和鐵軌上。什麼是a,b代表什麼?你能用真名寫一個例子嗎?最好在events_at – 2010-10-20 09:22:44
a和b是陣列的兩個元素。你指定你想要第一個之前的第二個。 – 2010-10-20 09:24:15
你的例子應該是:<%= render:partial =>'event',:collection => @ events.sort {| a,b |灣event_at <=> a.event_at}%> – Yannis 2010-10-20 09:36:52
你可以只扭轉有序集合:
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>
但正如Yannis所說的,當你從數據庫理想地獲取數據時,你最好進行排序。
這使它工作。但我想嘗試其他的學習例子。 – 2010-10-20 11:04:29
在Rails 3正確的語法是:通過使用desc
方法與參數上http://guides.rubyonrails.org/active_record_querying.html
@events.order(event_at: :desc)
像描述。
見例如
@events.desc(:event_at)
下面這會給你@events在event_at
領域的降序排列。
謝謝。
這是Rails 3+的最佳答案,因爲它可以在數據庫中進行排序而無需編寫原始SQL。 – DaveMongoose 2016-08-04 10:11:27
你可以做到這一點
<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>
我使用rails 2.3.5 :( – 2010-10-20 09:43:08
然後沒問題,只適應我的例子:'named_scope:desc,:order =>(「events .event_at DESC「)'和'<%= render:partial =>'event',:collection => @ events.desc%>' – Yannis 2010-10-20 10:09:20
當我試着這樣的時候, :desc,:order =>(「events.event_at DESC」),然後試圖用<%= render:partial =>'event',:collection => @ events.desc%>來調用它,但是我得到了錯誤:未定義的方法'desc'爲# –
2010-10-20 11:04:02