2012-03-13 2 views
0

레일 프레임 워크를 처음 사용하여이 문제를 해결하는 데 오랜 시간이 걸렸습니다 ... 특정 사용자가 속한 팀 이름을 표시하려고합니다 (표시 작업 (사용자 세부 정보)는 작동하지만 인덱스는 작동하지 않음). 행동 (모든 사용자)레일 테이블 관계 : 관련 값을 출력하는 방법?

내가 만든 테이블 :

teams         users 
-----------       --------------- 
id (integer)       id(integer) 
name (string)       fname(string) 
             lname(string) 
             team_id(integer) 

나는 다음과 같은 클래스가 있습니다

다음
class Team < ActiveRecord::Base  class User < ActiveRecord::Base 
attr_accessible :name, :user_id  attr_accessible :fname, :lname, :team_id 
has_many :users      belongs_to :team 

나는 다음과 같은 사용자 컨트롤러가 :

나는 인덱스보기에서 동일한 코드를 사용하려고하면
class UsersController < ApplicationController 
def show 
    @user = User.find(params[:id]) 
end 

def index 
    @users = User.paginate(page: params[:page], per_page: 15) 
end 

은 사용자의 팀 이름 그러나 ... 완벽하게 잘 작동하는 ...

Team: <%= @user.team[:name] %> 

입니다 표시하는 코드를 .. 그리고 이렇게하면 "정의되지 않은 메서드 인"team for nil : NilClass "오류가 발생합니다.

<table class="table table-striped"> 
    <% @users.each do |user| %> 
<tr> 
     <td> 
     <%= "#{user.fname} #{user.lname}" %> 
     </td> 
    <td> 
    Team: <%= @user.team[:name] %> 
    </td> 
    </tr> 
    <% end %> 
</table> 

내가 뭘 잘못 했니? 도와 줘서 고마워, 정말 고마워!

답변

2

블록 안에 있습니다. 대신

Team: <%= @user.team[:name] 

을하는 당신은 간과 :

명확성을 위해
+1

, 문제가 당신이 블록 자체에 걸하지

Team <%= user.team[:name] 

쉬운 버그를 작성해야 -는 것을의 인덱스 액션에서 결코'@ users'에 값을 할당하지 않을 것입니다. 그리고 블록에서 여러분이 사용하는 파라미터는'user'이지'@ users'가 아닙니다 – bblack

+0

정말 고마워요. – coffeelovesmilk