如何在Rails 3中創建查詢集和視圖(@contacts)以按字母順序列出ActiveRecord對象?Rails 3按字母順序列出ActiveRecord對象
我試圖做這個實現;
A - > 的接觸,
B開始 - > 聯繫與B開始等
最後一眼: http://jquerymobile.com/demos/1.0b1/#/demos/1.0b1/docs/lists/lists-divider.html
感謝
如何在Rails 3中創建查詢集和視圖(@contacts)以按字母順序列出ActiveRecord對象?Rails 3按字母順序列出ActiveRecord對象
我試圖做這個實現;
A - > 的接觸,
B開始 - > 聯繫與B開始等
最後一眼: http://jquerymobile.com/demos/1.0b1/#/demos/1.0b1/docs/lists/lists-divider.html
感謝
你必須做這樣的事情:
@users = User.all.group_by{|u| u.name[0]}
在視圖:
<% @users.keys.sort.each do |starting_letter| %>
<%= starting_letter %>
<% @users[starting_letter].each do |user| %>
<%= user.name %>
<% end %>
<% end %>
獲取從數據庫中的所有聯繫人和在陣列上使用enum.group_by
方法:
@contacts = Contact.order(:name)
@contacts.group_by{ |contact| contact.name[0] }.each do |contact|
# ...
end
酷的回答感謝,這種方法確實有效,但在我執行我需要嵌套循環視圖「通過開始名稱「和」通過聯繫人名稱「,因爲jQuery mobile將第一個字母和對象名稱保存爲不同的css類 – Harry
我相信,這將帶你回家,除非我誤解你想要的...
@contacts.order(:name).group(:name)
在這個時刻@contacts不是結果列表中,但將執行SQL迭代當你第一次嘗試使用它來獲得結果(.each,.count等)。
這裏對這一領域真正偉大指南:ActiveRecord querying
當我按字母順序排列的結果,我創建了一個單獨的列(例如first_letter
)來保存名稱的第一個字母,或當第一個字符不是字母時,保留「#」。 (我一般做這個的時候我只顯示一次一個字母,所以如果你不按首字母查詢這可能是矯枉過正。)
控制器代碼看起來像@contacts = Contact.all.order('first_letter, name').group_by(&:first_letter)
簡單(HAML)視圖看起來是這樣的(我不是很快看到想要什麼樣的輸出的jQuery移動的):
- (['#'] + ('A'..'Z').to_a).each do |letter|
%h2 #{letter}
%ol
- if [email protected][letter].empty?
- @contacts[letter].each do |contact|
%li #{contact.name}
如何創建一個鏈接到所有以「F」開頭的用戶並將其顯示在單獨的頁面上? –