Ruby on Rails: รับค่าสูงสุดจากคอลัมน์ DB


125

ขณะนี้ฉันสามารถสร้างแบบสอบถาม SQL แบบตรงบนฐานข้อมูลของฉัน:

SELECT MAX(bar) FROM table_name

และส่งกลับด้วยค่าสูงสุดในตารางนั้น เมื่อฉันทำสิ่งที่ฉันคิดว่าเป็นการโทรที่เทียบเท่ากันใน Rails มันไม่ได้ผล ฉันกำลังโทร:

Bar.all(:select => "Max(bar)")

สิ่งนี้กลับมาพร้อมกับ:

[#<Bar >]

ในคอลัมน์ที่ฉันโทรหาเป็นชุดของหมายเลขระบุตัวตนฉันกำลังมองหาหมายเลขที่ใหญ่ที่สุด มีวิธีอื่นในการเข้าถึงสิ่งนี้ใน Rails หรือไม่?

คำตอบ:


272

สมมติว่าชื่อรุ่นของคุณBarและมีชื่อคอลัมน์barสิ่งนี้ควรใช้งานได้:

Bar.maximum("bar")

ดูส่วนคู่มือรางที่ยอดเยี่ยมเกี่ยวกับการคำนวณสำหรับข้อมูลเพิ่มเติม


อะฮ่า! ใช่คุณที่ทำมัน ฉันจะตรวจสอบคำตอบของคุณทันทีที่ SO จะแจ้งให้ฉันทราบ ขอบคุณ!
keybored

6

อีกวิธีหนึ่ง

Bar.select("Max(bar) as max_bar").first.max_bar

5
ทำไมคุณถึงต้องการทำเช่นนี้? ละเอียดมากขึ้นและดำเนินการค้นหาเหมือนกันทุกBar.maximum(:bar)ประการดังนั้นฉันไม่เห็นเหตุผลที่จะ "แนะนำ" คำตอบนี้เลย ...
nathanvda

19
ตัวอย่างเช่นหากคุณต้องการทั้ง min และ max:Bar.select("MAX(bar) max_bar, MIN(bar) min_bat").first.attributes
Shalev Shalit

คนที่ถามคำถามต้องการราคาสูงสุดเท่านั้น
Chris Peters

1
เขาให้คำตอบที่ถูกต้องสำหรับคำถามนี้ อาจไม่ใช่คำตอบที่ดีที่สุด แต่เขาไม่ได้ทำอะไรผิด
david0116
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.