2013-08-11 2 views
0

3 나는이보기를 통해액세스 (STI)는

<p> 
    <b>Name:</b> 
    <%= @group.name %> 
</p> 

<p> 
    <b>Leader:</b> 
    <%= @leader.last_name %> 
</p> 

을 그룹의 페이지를 그려 얻으려고 다음과 같은 모델

class Group < ActiveRecord::Base 
    has_many :people 
    has_one :leader 
    attr_accessible :name 
end 

class Person < ActiveRecord::Base 
    belongs_to :group 
end 

class Leader < Person 
    belongs_to :group 
    attr_accessible :first_name, :last_name 
end 

이 레일 #이 전무에 대한 정의되지 않은 메서드`LAST_NAME '를 보여 그룹에 NoMethodError : NilClass 여기

는 groups_controller입니다

def show 
    @group = Group.find(params[:id]) 
    @leader = @group.leader 

무엇이 잘못 되었나요?

UPD 이 또한 정말 붙어있어

<b>Leader:</b> 
<%= @group.leader.last_name %> 

작동하지 않습니다/도와주세요!

답변

0

귀하의 케이스에있는 @group에는 leader이 없습니다. 그 변수는 무효합니다. 따라서 무명의 지도자에게 오류라고 이름을 붙이려고 할 때.

<% if @group.leader.nil? %> 
    This group has no leader 
<% else %> 
    <%= @group.leader.last_name %> 
<% end %> 
+0

감사 : 블록이 에러가 발생하지 않도록 할 경우

당신은에서 페이지의 해당 부분을 둘러싸 수 있습니다. 그래서 '@ leader = @ group.leader'는 충분하지 않습니다. '리더'를 어떻게 그리고 어디서 정의해야합니까? – Maria

+0

'@leader = @ group.leader'는 괜찮지 만, 테스트 케이스에있는 특정 그룹에 '리더'가 지정되어 있지 않습니다. 보기에서 페이지의 해당 부분을 if 블록으로 묶어서 '리더'를 처리 할 수 ​​있습니다. 설명 할 답변을 업데이트했습니다. – Matt

+0

감사합니다. 그게 맞았습니다. – Maria