2012-03-02 13 views
1

나는 귀하의 계정 정보를 수정할 수있는 레일 응용 프로그램을 보유하고 있습니다. edit my information 버튼을 클릭하면 링크를 클릭 할 때 다음과 같은 오류가 발생합니다. 사용자 # 편집에NoMethodError in users #

NoMethodError - 정의되지 않은 메서드`이름을 ' 전무에 대한 내 사용자/_form.html.erb

<% else %> <td><%= @user.admin_level.name %> 
을의 다음 줄을 가리키는 NilClass

내 전체 추적은 다음과 같습니다 : Pastie

무엇이 잘못 되었나요? user.admin_level.name 나는 canno 이 오류가 발생하는 이유는 admin_level 엔티티에도 속성 이름이 존재한다는 것입니다. 내 users_controller에 이름을 정의해야 할,

# GET /users/:id/edit 
    def edit 
    if @user 
     respond_to do |format| 
     format.html # edit.html.erb 
     end 
    else 
    redirect_to routing_error_path 
    end 
    end 

그 내가 뭔가를 놓친 것 같다 :

내 users_controller는 다음 데프 편집이있다?

+0

admin_level은 nil이므로 메서드를 호출 할 수 없습니다. 이 예외가 발생하지 않도록하려면이 코드를 대신 사용하십시오. <% = @ user.admin_level.try (: name) %> – mohamagdy

답변

1

이는 단순히 <%= @user.admin_level %>nil임을 의미합니다. 이는 사용자에게 admin_level이 할당되지 않았기 때문일 수 있습니다. 따라서 noMethodError를 발생시키는 nil에 .name을 호출하십시오.

수정은 <%= @user.admin_level.name if @user.admin_level %>, 또는 @ user.admin_level이 전무 것 같다 (만 모두 표시 뭔가 admin_level이 전무가 아닌 경우)

+0

감사합니다. :-) –

0

을 제외하고 보면 어쩌면 <%= @user.admin_level.try(:name) %> 것이다.

이것이 실제로 설정되어 있는지 (디버그 문 사용) 확인하고 @user 설정 방법을 게시 할 수 있습니까?