Hầu hết các ví dụ tôi đã thấy làm điều này kết thúc bằng việc đếm các hàng trong bảng, sau đó tạo một số ngẫu nhiên để chọn một. Điều này là do các lựa chọn thay thế như RAND()
không hiệu quả ở chỗ chúng thực sự lấy mọi hàng và gán cho chúng một số ngẫu nhiên, hoặc vì vậy tôi đã đọc (và tôi nghĩ là cơ sở dữ liệu cụ thể).
Bạn có thể thêm một phương thức như phương thức tôi đã tìm thấy tại đây .
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
Điều này sẽ làm cho bất kỳ Mô hình nào bạn sử dụng đều có phương thức được gọi là random
hoạt động theo cách mà tôi đã mô tả ở trên:tạo một số ngẫu nhiên trong số các hàng trong bảng, sau đó tìm nạp hàng được liên kết với số ngẫu nhiên đó. Vì vậy, về cơ bản, bạn chỉ thực hiện một lần tìm nạp, đó là điều bạn có thể thích :)
Bạn cũng có thể xem qua plugin rails này .