Tôi đang cố gắng tìm tất cả Người dùng có id lớn hơn 200, nhưng tôi gặp sự cố với cú pháp cụ thể.Đường ray: Sử dụng lớn hơn/ít hơn với tuyên bố ở đâu
User.where(:id > 200)
và
User.where("? > 200", :id)
có cả thất bại.
Mọi đề xuất?
Tôi đang cố gắng tìm tất cả Người dùng có id lớn hơn 200, nhưng tôi gặp sự cố với cú pháp cụ thể.Đường ray: Sử dụng lớn hơn/ít hơn với tuyên bố ở đâu
User.where(:id > 200)
và
User.where("? > 200", :id)
có cả thất bại.
Mọi đề xuất?
Hãy thử điều này
User.where("id > ?", 200)
tôi đã chỉ được thử nghiệm này trong Rails 4 nhưng có một cách thú vị để sử dụng một dải với một hash where
để có được hành vi này.
User.where(id: 201..Float::INFINITY)
sẽ tạo ra SQL
SELECT `users`.* FROM `users` WHERE (`users`.`id` >= 201)
Cùng thể được thực hiện dưới với -Float::INFINITY
.
Tôi vừa đăng câu hỏi tương tự hỏi về việc thực hiện việc này với ngày here on SO.
Câu trả lời này là tốt nhất cho Rails 4 IMO. Được sử dụng nó trong một thời gian và hoạt động hoàn hảo. –
Tại sao điều này vượt trội so với câu trả lời được chấp nhận, ngoài sự tò mò? – mecampbellsoup
Superior là gây hiểu nhầm. Nói chung, bạn đạt được sự linh hoạt hơn với các truy vấn AREL của mình nếu bạn có thể sử dụng cú pháp băm trên các chuỗi đó là lý do tại sao nhiều người thích giải pháp này. Tùy thuộc vào dự án của bạn/nhóm/tổ chức bạn có thể muốn một cái gì đó dễ dàng hơn cho một ai đó liếc nhìn mã để tìm ra, mà câu trả lời được chấp nhận là. – Aaron
Nếu bạn muốn có một văn bản trực quan hơn, nó tồn tại một viên ngọc gọi squeel mà sẽ cho phép bạn viết hướng dẫn bạn như thế này:
User.where{id > 200}
Thông báo các 'cú đúp' ký tự {} và id
là chỉ là một văn bản .
Tất cả bạn phải làm là thêm squeel để Gemfile của bạn:
gem "squeel"
này có thể làm dịu cuộc sống của bạn rất nhiều khi viết câu lệnh SQL phức tạp trong Ruby.
Tôi khuyên bạn nên tránh sử dụng squeel. Dài hạn là khó khăn để duy trì và đôi khi có hành vi kỳ quặc. Ngoài ra nó là lỗi với một số phiên bản Active Record –
Tôi đã sử dụng squeel trong một số năm và vẫn hài lòng với nó. Nhưng có lẽ nó có giá trị để thử ORM khác, như phần tiếp theo (<> squeel) ví dụ, mà có vẻ hứa hẹn các tính năng tốt đẹp để thay thế ActiveRecord. – Douglas
Một sử dụng tốt hơn là tạo ra một phạm vi trong mô hình sử dụng where(arel_table[:id].gt(id))
ngắn:
User.where("id > 200")
Tôi cho rằng điều này phải năng động và rằng người đăng muốn tránh SQL injection bằng cách sử dụng các truy vấn được tham số hóa (cú pháp 'where (" id>? ", 200)'. Điều này không đạt được điều đó. –
Ngoài ra kiểm tra đá quý Squeel từ Ernie Miller – cpuguy83
Có lý do nào để thích sử dụng '', chứ không phải? so với nội tuyến '200'? – dukedave
nó tự động thoát khỏi 200 (có thể cho người dùng nhập giá trị, nó tránh khả năng tấn công SQL injection) – user1051849