2009-06-03 6 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

부분적으로 문제가 있습니까? 그렇다면 partial은 호출자의 클래스 변수에 액세스 할 수 없다는 것을 알아야합니다. 액세스 권한이 필요한 항목을 전달해야합니다. – workmad3

+0

js.erb 파일에 partial을 생성 했으므로 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

Lee : "<% = person.last_name - %>"가 아니라 "<% = person.last_name - %>" 부분적? –

관련 문제