ฉันมีโค้ดเล็กน้อยในโมเดล user.rb
ของฉันดังนี้:
def self.aggregate(articles)
array = []
articles.each do |a|
array << {
:id => a.nid,
:views => a.daily_view_metrics.sum_views(a.nid),
:date => a.daily_view_metrics.latest_date(a.nid),
:title => a.daily_view_metrics.latest_title(a.nid),
:visits => a.daily_view_metrics.sum_visits(a.nid)
}
end
return array
end
ใน user_controller
ของฉัน ฉันส่งผ่านไปยังวิธี show
@metrics = User.aggregate(@articles)
(@articles เป็นเพียงส่วนย่อยของบทความสำหรับผู้ใช้นั้น)
ในมุมมองของฉัน (user#show
) ฉันเรียก @metrics.each do |m|
แล้วส่งออกสิ่งต่าง ๆ ทั้งหมดในตาราง ตอนนี้ตามวิดีโอนี้ ดูเหมือนว่าเมธอด link_to พร้อมพารามิเตอร์ url ดูเหมือนจะ เป็นวิธีที่ดีที่สุดในการให้ผู้ใช้สลับสิ่งที่พวกเขาต้องการจัดเรียงแบบไดนามิก
ฉันจะป้อนพารามิเตอร์ url นั้นเพื่อจัดเรียงอาร์เรย์ได้อย่างไร ฉันพยายามเรียก @metrics.sort_by{|h| h[params[:sort]]}.each do |m|
โดยที่ :sort
เป็นพารามิเตอร์ url จากลิงก์ของฉัน (เช่น การคลิกลิงก์ส่วนหัวของตารางมุมมองส่งผ่าน :sort => ":views"
ใน โดยพื้นฐานแล้วฉันกำลังพยายามทำสิ่งนี้ sort_by{|h| h[:views]}
เนื่องจากมันทำงานได้ดีสำหรับการเรียงลำดับอาร์เรย์ อย่างไรก็ตามไม่มีอะไรเกิดขึ้น อาร์เรย์ไม่ใช่ ' ไม่ได้จัดเรียง
แก้ไข:
ฉันแก้ไขมันด้วยการทำให้วิธีการรวมส่งผ่านคีย์ในรูปแบบสตริง (เช่น "id" ซึ่งตรงข้ามกับ :id) พารามิเตอร์ url ก็ทำงานได้อย่างสวยงาม
<%= link_to "Views", :sort => "views"%>
ตอนนี้เรียงลำดับตามจำนวนการดูจากน้อยไปหามาก
.to_sym
ได้ตลอดเวลาหากต้องการparams[:sort] # => "views"
params[:sort].to_sym # => :views
- person Rafa Paez   schedule 10.03.2014