2012-08-06 19 views
6

Chcę przeszukać tabelę z wieloma warunkami w Railsach. Używam Active Record and Rails w wersji 3.1.0.Znajdź według wielu warunków w szynach

mam Filmy obiektu i chcesz osiągnąć równowartość następujących w szynach:

Select * from Movies where rating = 'R' OR rating = 'PG' 

Próbowałem następujących ale to nie działa

@filtered = Movies.find(:all, :conditions => { :rating => 'R', :rating => 'PG' }) 

Czy należy udzielać pomocy zapisz odpowiednik zapytania SQL wspomnianego powyżej.

Odpowiedz

10

Jednym ze sposobów byłoby zbudowanie „In” stan z:

@filtered = Movie.where(:rating => ['R', 'PG']).all 

EDIT: Zmieniłem swoją klasę „Film” z „Filmy”. Zakładam, że tego właśnie chcesz.

+0

'.all' nie jest konieczne. – Mischa

+0

@Mischa - Bardzo prawdziwe, ale to oczywiście zależy od tego, gdzie i jak używasz tego oświadczenia, a zgadzam się w większości przypadków, że nie jest to konieczne. Aby uzyskać tę odpowiedź, chciałem jawnie zwrócić wynikową tablicę, a nie obiekt ActiveRecord :: Relation, aby uniknąć ewentualnego zamieszania. Dzięki za wskazanie tego! – miked

+0

Po prostu wydaje mi się dziwne, że nazywam "wszystko", gdy * nie * chcesz wszystkiego. Jeśli robisz to tylko po to, aby zwrócić tablicę zamiast "ActiveRecord :: Relation", to IMO będzie czystsze, aby zamiast tego wywołać 'to_a'. – Mischa

4

Można to zrobić przy użyciu:

Movie.where(:rating => ['R','PG']) 
4

W szyna 4, znaleźć z wielu warunków, na przykład rozważyć znalezienie Profile z first_name i last_name

Profile.find_by first_name: 'stack', last_name: 'flow' 

Znajduje pierwszy rekord pasujący określone warunki. Nie ma domniemanych porządków, więc jeśli porządek ma znaczenie, powinieneś to określić samodzielnie. Jeśli żaden rekord zostanie znaleziony, zwraca nil

Profile.find_by! first_name: 'stack', last_name: 'flow' 

Ci się find_by, poza tym, że jeśli nie zostanie znaleziony rekord, zgłasza błąd ActiveRecord :: RecordNotFound.

Aby uzyskać więcej informacji przeczytaj Rails Finder Method

1: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn Rail 4, znaleźć z wielu warunków, na przykład rozważyć znalezienie Profile z first_name i last_name

Profile.find_by first_name: 'stack', last_name: 'flow' 

Znajduje pierwszy rekord pasujący określone warunki. Nie ma domniemanych porządków, więc jeśli porządek ma znaczenie, powinieneś to określić samodzielnie. Jeśli żaden rekord zostanie znaleziony, zwraca nil

Profile.find_by! first_name: 'stack', last_name: 'flow' 

Ci się find_by, poza tym, że jeśli nie zostanie znaleziony rekord, zgłasza błąd ActiveRecord :: RecordNotFound.

Aby uzyskać więcej informacji przeczytaj Rails Finder Method

Powiązane problemy