2012-07-03 6 views

Odpowiedz

176

Spróbuj

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

Również sprawdzić Squeel gem od Ernie Miller – cpuguy83

+4

Czy istnieje jakikolwiek powód, aby wolą używać '' raczej? niż wpisanie '200'? – dukedave

+8

automatycznie wymyka się 200 (jeśli możliwe było wprowadzenie wartości przez użytkownika, unika się możliwości ataków typu SQL injection). – user1051849

71

Mam tylko przetestowane w Rails 4 ale ciekawy sposób na wykorzystanie szeregu z where hash, aby uzyskać to zachowanie.

User.where(id: 201..Float::INFINITY) 

wygeneruje SQL

SELECT `users`.* FROM `users` WHERE (`users`.`id` >= 201) 

To samo można zrobić za mniej niż -Float::INFINITY.

Właśnie napisałem podobne pytanie z prośbą o zrobienie tego z datami here on SO.

+0

Ta odpowiedź jest najlepsza dla Rails 4 IMO. Używam go od dłuższego czasu i działa idealnie. –

+2

Dlaczego jest to lepsze od przyjętej odpowiedzi, z ciekawości? – mecampbellsoup

+4

Superior wprowadza w błąd. Generalnie możesz uzyskać większą elastyczność dzięki zapytaniom ARel, jeśli możesz używać składni skrótu do ciągów, dlatego wielu wolałoby takie rozwiązanie. W zależności od twojego projektu/zespołu/organizacji możesz chcieć czegoś łatwiejszego dla kogoś, kto rzuca okiem na kod, aby dowiedzieć się, która jest zaakceptowana. – Aaron

4

Jeśli chcesz bardziej intuicyjny zapis, że istnieje gem nazwie squeel który pozwoli Ci napisać instrukcję jak to:

User.where{id > 200} 

zauważenie znaków „karczkiem” {} i id jest tylko tekst .

Wszystko co musisz zrobić, to dodać squeel do Gemfile:

gem "squeel" 

To może złagodzić twoje życie dużo pisząc złożonej instrukcji SQL w Ruby.

+5

Polecam unikać używania piszczeli. Długoterminowe jest trudne do utrzymania, a czasami ma dziwne zachowanie. Również jest błędny z niektórymi wersjami Active Record –

+0

Używam piszczałki przez kilka lat i nadal jestem z niej zadowolony. Ale może warto wypróbować inny ORM, na przykład sequel (<> squeel), który wydaje się obiecujący, ładne funkcje do zastąpienia ActiveRecord. – Douglas

16

Lepsze wykorzystanie jest stworzenie możliwości w modelu użytkownika where(arel_table[:id].gt(id))

0

Shorter:

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

Zakładam, że to musi być dynamiczne, a plakat chce uniknąć iniekcji SQL za pomocą sparametryzowanych zapytań (składnia 'where (" id>? ", 200)'. Tego nie osiąga. –