2012-03-10 14 views
39

w moim app mam użytkowników z różnych krajów i chcą wykonywać znaleziska na nichszyn: Znajdź wszystkie warunki

starałem się zrobić to w ten sposób w akcji index

@fromcanada = User.find(:all, :country => 'canada') 

ale mam błąd

Jednak, co prowadzi mnie do pytania, co może stać się kluczem? W pliku schematu bazy danych mam kolumnę "kraj" w tabeli użytkowników.

t.string "country" 

Ponadto, gdy zrobiłem znaleźć wszystko

@users = User.all 

udało mi się zrobić to

<%= user.country %></p> 

Czy możesz wyjaśnić, dlaczego mój Znajdź wszystkie warunki nie działa? i pokaż mi, jak powinienem to zrobić?

+1

Jakiej wersji Rails używasz? – James

+3

'@fromcanada = User.where (: country => 'canada')." Wszystko byłoby prawdopodobnie lepszym stylem. –

+0

@muistooshort dlaczego wywołanie 'all' jest potrzebne? Kiedy wywołujesz 'User.all', otrzymujesz wszystkich użytkowników, ale nie rozumiem kiedy filtrujesz użytkowników z' where' (przepraszam za pytanie dla nowicjuszy) –

Odpowiedz

67

Spróbuj tego.

@fromcanada = User.find(:all, :conditions => { :country => 'canada' }) 

edit: Jak jason328 wskazał, powyższa odpowiedź jest przestarzałe w 3.2, a uaktualniony odpowiedź byłaby

@fromcanada = User.where(:country => 'canada') 
30

W razie nikt przeczytać komentarze. Lepszym formatem będzie

@fromcanada = User.where(country: 'canada').all 

Kod poprzedniej odpowiedzi jest przestarzały w punkcie 3.2.

Dla tych, którzy używają Rails 4, wystarczy usunąć metodę all.

@fromcanada = User.where(country: 'canada').to_a 

Należy pamiętać, że to_a wywołuje zapytanie do formatu tablicowego.

+3

To użycie Relation # all jest przestarzałe w szynach 4. Jeśli chcesz do szybkiego ładowania, po prostu zamień 'all' na' load'. W przeciwnym razie nie potrzebujesz nawet "wszystkiego". Twoja odpowiedź nie jest zła. Po prostu nie mogę się doczekać torów 4. – courtsimas

Powiązane problemy