2009-06-03 3 views
6

Я пытаюсь получить доступ к переменной экземпляра из файла js.erb.rails: обращение к переменной экземпляра в файле 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 %>') 

Когда я просматриваю к [controller_name_here] /get_person.js ... Я получаю ноль ошибку объекта на @person. (Я знаю, что Person.find (1) возвращает объект)

Примечание: У меня фактически возникает проблема с частичным в файле js.erb и пытаюсь определить причину.

+0

Является ли проблема в частичном? Если это так, вы должны знать, что частицы не имеют доступа к переменным класса своего вызывающего. Вам нужно передать все, к чему вы хотите иметь доступ. – workmad3

+0

Поскольку я создаю частичное в файле js.erb, не должен ли мой файл js.erb иметь доступ к переменным класса? – Lee

+0

Нет. Вы должны передать их в качестве местных жителей: <% = render (: partial => 'partials/foo', : locals => {: whatwhat => @somedata})%> – jonnii

ответ

5

следующие работы для меня:

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

Это странно, переменные экземпляра предназначены для видимости во всех частичных файлах, поэтому сбор локальных сетей не должен быть необходимым (в данном конкретном случае) , Здесь что-то еще не так. –

+0

Это действительно странно. Я получаю «Ошибка при оценке nil.last_name» – Lee

+0

Ли: вы уверены, что используете «<% = person.last_name -%>», а не «<% = @ person.last_name -%>» в частичная? –