2011-02-03 12 views
7

pytanie bardzo dla początkujących. Używam interfejsu zapytań szyn 3, jak przedstawiono:Włączanie ActiveRecord :: Relacja do modelu

class User < ActiveRecord::Base 

def self.authenticate 
if Rails.env = 'development' 
    self.where('username = ?', 'development_user') 
else 
    self.where('username = ?', request.env['REMOTE_USER']) 
end 
end 

end 

Ten wraca obiektu ActiveRecord :: Związek, gdzie w rzeczywistości chcę obiektu użytkownika, który odnosi się do zapytania. Jak zmienić to w obiekt użytkownika?

Odpowiedz

12

Musisz "zatwierdzić" zapytanie, używając all, lub find.

def self.authenticate 
user = Rails.env.development? ? "development_user" : request.env['REMOTE_USER'] 
self.where('username = ?', user).first 
end 
+0

Dzięki, wiedziałem, że to było coś prostego. –

+2

Uwaga wygląda na to, że używanie "wszystkich" z "gdzie (..)" jest przestarzałe w Rails4. Gdy próbowałem go na najnowszej wersji Railsów, otrzymałem to ostrzeżenie: OSTATECZNE OSTRZEŻENIE: Relacja nr wszystkie jest przestarzała. Jeśli chcesz szybko ładować relację, możesz wywołać #load (np. 'Post.where (opublikowany: true) .load'). Jeśli chcesz uzyskać tablicę rekordów z relacji, możesz wywołać #to_a (np. 'Post.where (opublikowana: prawda) .to_a'). (wywołane z irb_binding pod numerem (irb): 39) – omnisis

+0

Zgadza się. Moja odpowiedź była dla Rails 3. –

Powiązane problemy