2009-06-03 22 views
6

Ich versuche, von einer js.erb-Datei auf eine Instanzvariable zuzugreifen.rails: Zugriff auf eine Instanzvariable in einer js.erb-Datei

#controller 
def get_person 
    @person = Person.find(1) 

    respond_to do |format| 
    format.js{} 
    end 
end 

#get_person.js.erb 
alert('<%= @person.last_name %>') 

Wenn ich wechseln Sie zu [controller_name_here] /get_person.js ... Ich bekomme ein Null-Objektfehler auf @person. (Ich weiß, Person.find (1) gibt ein Objekt zurück)

Hinweis: Ich habe tatsächlich Probleme beim Rendern einer partiellen in meiner js.erb-Datei und versuche, die Ursache zu identifizieren.

+0

Ist das Problem in der partiellen dann? Wenn das der Fall ist, sollten Sie wissen, dass Partialtöne nicht auf die Klassenvariablen ihres Aufrufers zugreifen können. Sie müssen alles eingeben, auf das Sie zugreifen möchten. – workmad3

+0

Da ich das Teil in meiner js.erb-Datei erstelle, sollte meine js.erb-Datei nicht Zugriff auf Klassenvariablen haben? – Lee

+0

Nein. Sie müssen sie als Locals übergeben: <% = render (: partielle => 'Partials/foo', : Einheimische => {: whatwhat => @somedata})%> – jonnii

Antwort

5

Die folgenden Werke für mich:

In /app/controllers/foo_controller.rb:
class FooController < ApplicationController 
    def get_person 
    @person = Person.find(1) 
    respond_to do |format| 
     format.js 
    end 
    end 
end 
In /app/views/foo/get_person.js.erb:
<%= render :partial => '/foo/some_partial', :locals => { :person => @person } %> 
In /app/views/foo/_some_partial.js.erb:
person = { 
    last_name: '<%= person.last_name -%>' 
} 
+0

Das ist merkwürdig, Instanzvariablen sollen in allen Partials sichtbar sein, so dass die lokalen Konstrukte nicht notwendig sein sollten (in diesem speziellen Fall) . Da ist noch etwas anderes. –

+0

das ist wirklich seltsam. Ich bekomme "Der Fehler trat bei der Auswertung nil.last_name" – Lee

+0

Lee: Sie sind sicher, dass Sie verwenden "<% = person.last_name -%>" und nicht "<% = @ person.last_name -%>" in der teilweise? –

Verwandte Themen