2012-10-21 2 views
0

정말 이것에 대한 도움을 주시면 감사하겠습니다.레일, id 대신보기에서 모델의 이름을 표시

class User < ActiveRecord::Base 
    has_many :ideas, :class_name => 'Challenge', :foreign_key => 'creator_id' 
    has_many :contributions, :class_name => 'Challenge', :foreign_key => 'contributor_id' 

class Challenge < ActiveRecord::Base 
    belongs_to :creator, :class_name => 'User' 
    belongs_to :contributor, :class_name => 'User' 

내 문제는 이름보다는 도전 모델의 뷰에서 사용자의 ID를 표시 할 수있게되고 :

나는 다음과 같은 관계가있다.

콘솔에서 나는 @challenge하는 과제를 할당하고 완벽한 창조자의 이름을 반환

@challenge.creator.name 

를 입력 할 수 있습니다. 그러나 이것을 내 관점에 넣으려고하면 정의되지 않은 메서드 인 '이름'이 반환됩니다.

내가 대신 creator_id, 나는이 한 올바른 일에 가장 가까운 내 도전 인덱스 뷰의 관련 부분을 만드는 것이 창조자 말 생각 : 작성자 이름을 반환

<tr><% @challenges.each do |challenge| %><tr> 
<td><%= challenge.creator %></td> 

대신의 필드는 다음과 같이 표시되는 이유

#<User:0x007fe1b81c20b8> 

아무도 설명해 주시겠습니까 어떻게 내가 할 수있는 내보기로 출력 사용자의 이름을 : 내가 원하는 무엇인가 뷰, 그것은 다음과 같은 출력을 반환합니다.

내 도전 컨트롤러의 index 액션은 다음과 같습니다

@challenges = Challenge.all 

가 대단히 감사합니다.

+0

으로

<td><%= challenge.creator %></td> 

를 교체합니다. "다음 출력을 리턴합니다."그 다음에 출력이 없습니다. –

+0

감사합니다! – James

답변

1

개체 자체를 표시해야합니다. challenge.creator는 객체이며 작성자의 이름이 아닙니다.

그냥 지적

<td><%= challenge.creator.try :name %></td> 
+0

그 결과는 다음과 같습니다. 정의되지 않은 메서드 'name'for nil : NilClass – James

+0

이름을 액세스 할 수있게하려면 뭔가를 변경해야 할 것 같습니까? – James

+0

챌린지 개체에 대한 작성자를 설정하지 않았습니다 (challenge.creator = user_obj1). 따라서 제작자는이 문제에 대해서는 무방하며 개체에는 이름 메서드가 없습니다. <% = challenge.creator.try : name %>. 이 코드를 사용해보십시오. 제작자가있는 경우 작성자의 이름을 지정합니다. 그렇지 않으면, 충돌없이 o/p 것입니다. – Nerve