2009-06-03 7 views
6

Estoy intentando acceder a una variable de instancia de un archivo js.erb.carriles de acceso: una variable de instancia en un archivo js.erb

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

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

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

Cuando hojeo a [controller_name_here] /get_person.js ... me sale un error de objeto nulo en @person. (Sé Person.find (1) devuelve un objeto)

Nota: De hecho, estoy teniendo problemas para la prestación de un parcial en mi archivo js.erb y estoy tratando de identificar la causa.

+0

es el problema en el parcial, entonces? Si es así, debe saber que los parciales no tienen acceso a las variables de clase de la persona que llama. Necesitas pasar todo lo que quieras que tenga acceso. – workmad3

+0

Dado que estoy creando el parcial en mi archivo js.erb, ¿no debería mi archivo js.erb tener acceso a las variables de clase? – Lee

+0

No. Usted tiene que pasar en locales como: <% = render (: parcial => 'parciales/foo', : locales => {: whatwhat => @somedata})%> – jonnii

Respuesta

5

Los siguientes obras para mí:

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

Este es extraño, variables de instancia están destinados a ser visible en todos los parciales así que la gente construyen no debe ser necesario (en este caso particular) . Hay algo más raro aquí. –

+0

eso es realmente extraño. Me sale "El error ocurrió al evaluar nil.last_name" – Lee

+0

Lee: está seguro de que está utilizando "<% = person.last_name -%>" y no "<% = @ person.last_name -%>" en el ¿parcial? –

Cuestiones relacionadas