2012-07-03 26 views

Trả lời

176

Hãy thử điều này

User.where("id > ?", 200) 
+0

Ngoài ra kiểm tra đá quý Squeel từ Ernie Miller – cpuguy83

+4

Có lý do nào để thích sử dụng '', chứ không phải? so với nội tuyến '200'? – dukedave

+8

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

71

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.

+0

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. –

+2

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

+4

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

4

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.

+5

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 –

+0

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

16

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))

0

ngắn:

User.where("id > 200") 
+4

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 đó. –

Các vấn đề liên quan