2011-11-06 9 views

Odpowiedz

10

Ponieważ czasami nie wiesz, ile obiektów powinno zwrócić zapytanie, więc dla spójności zawsze otrzymujesz tablicę.

Aby uzyskać pojedynczy obiekt użyć

store = Store.where("some_id = ?", some_id).first 

Jeśli szukasz pierwotnego ID modelu, można także użyć

store = Store.find(some_id) 

który podniesie wyjątek RecrodNotFound (obsługiwane przez szyny domyślnie 404), jeśli nie znajdzie obiektu.

+0

jak mógł Sprawdzam, czy nie zwrócono żadnych wyników? to wydaje się nie działać: 'umieszcza store.name chyba store.blank' – Hopstream

+1

Zwróci' nil' jeśli nic nie zostało znalezione, możesz sprawdzić za pomocą 'store.nil?'. –

+0

Jeszcze jedno głupie pytanie Jakub ... Czy istnieje lepsza notacja do napisania '.where (" some_id =? ", Some_id)' ... robi coś takiego w railach ... '.where (: some_id = > some_id) ' – Hopstream

0

Gdzie klauzula w szynach 3.x zawsze będzie zwracana i jest celem, do którego można użyć do łączenia łańcuchów metod.

Tak więc instrukcja return instrukcji where jest zawsze tablicą.

dostępu do pierwszego elementu trzeba zrobić

object.first sugerowane przez Jakuba

5

Istnieją również dynamiczne dystansu

Store.find_by_some_id(some_id) 

są one równoznaczne z

Store.where(:some_id => some_id).first 
+0

Warto zauważyć, dynamiczne wyszukiwarki (inne niż find_by *) nie są obsługiwane w Railsach 4 Źródło: http://edgeguides.rubyonrails.org/4_0_release_notes.html#active-record-deprecations – GantMan

Powiązane problemy