2016-08-08 82 views
0

Im zu versuchen, herauszufinden, wie man eine einfache Anwendung in Rails machen 4.Rails Console Abfragen arbeiten; aber die gleiche Anforderung in der App eine Fehler

Ich habe Modelle für Benutzer, Profile und Identitäten. Die Verbände sind:

Benutzer

has_many :identities, dependent: :destroy 

has_one :profile, dependent: :destroy 

Profil

belongs_to :user 

Identität

belongs_to :user 

In der Konsole kann ich schreiben:

p = Profile.last p.user.identities.map (&: Provider)? .include ('facebook')

und produziert korrekt das Ergebnis: false

Wenn ich versuche, die folgenden in einem Profile Hilfsmethode zu schreiben :

if @profile.user.identities.map(&:provider).include?('facebook') 

ich eine Fehlermeldung erhalten, die sagt:

undefined method `user' for nil:NilClass 

ich in Benutzer in der App angemeldet haben. Ich kann nicht verstehen, warum ich in der Konsole erfolgreich darum bitten kann, aber ich bekomme einen Fehler, wenn ich es in der App versuche.

Kann jemand sehen, was schief gelaufen ist?

+0

Was Ihre Verbände aussehen? – jdgray

+0

Woher kommt @profile? – Milind

+0

Können Sie das Standard-Debugging-Juwel '' 'byebug''' verwenden, um das' '' @ profile''' zu überprüfen? – Nathan

Antwort

0

Ihre @profile ist nil. Deshalb tritt der Fehler auf.

Ich nehme an, dass Sie die Hilfsmethode aus Ihrer show.html.erb Datei aufrufen. in der show.html.erb Datei wie die Helfer-Methode aufrufen:

<%= helper_method_name(@profile) %> # make sure your @profile is a `Profile` object 

im profiles_helper.rb

def helper_method_name(profile) 
    if profile.user.identities.map(&:provider).include?('facebook') 
     // do something 
    end 
end 
+0

aber meine # Profil ist nicht Null. Ich kann @ profile.created_at in der nächsten Zeile der Show-Seite schreiben und es wird eine Zeit angezeigt.Ich benutze # anstelle des 'a' Symbols, weil diese Kommentare es nicht mehr als einmal erlauben. – Mel

+0

@Mei, irgendwie kann dein 'Helfer' die '@ profile'-Variable nicht empfangen. – Emu

+0

Sie haben Recht. Ich habe versucht, das Partielle in einer anderen Ansicht darzustellen. Das verursachte das Problem. Vielen Dank – Mel