2009-09-22 4 views
0

두 개의 User 및 Membership 모델이 있습니다. 사용자 has_many : 멤버쉽 회원 belongs_to : 사용자특정 외래 키에 대한 레코드를 찾는 올바른 방법

"세션 [: USER_ID]"사용자 거기에있는 모든 구성원에 @memberships을 설정 MembershipsController의 색인 방법을 수정하는 적절한 방법은 무엇입니까? @memberships = Membership.find :

내가 좋아하는 뭔가 시도 (: 모두 : 조건 => [ "USER_ID =?", 세션 [: USER_ID]])

하지만 레일 대신 사용자로부터 선택한다 회원의 :

Rendering memberships/index 
    ←[4;35;1mUser Columns (3.0ms)←[0m ←[0mSHOW FIELDS FROM `users`←[0m 
    ←[4;36;1mUser Load (1.0ms)←[0m ←[0;1mSELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 
    ←[4;35;1mCACHE (0.0ms)←[0m ←[0mSELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1←[0m 

답변

0

user_id가 올바르게 설정되지 않았습니다.

스크립트/콘솔 :

>> Membership.find(:first, :conditions => "user_id = 1") 
=> nil 

로그 :

Completed in 19ms (View: 9, DB: 6) | 200 OK [http://localhost/memberships] 
    [4;36;1mSQL (0.0ms)[0m [0;1mSET NAMES 'utf8'[0m 
    [4;35;1mSQL (0.0ms)[0m [0mSET SQL_AUTO_IS_NULL=0[0m 
    [4;36;1mUser Columns (2.0ms)[0m [0;1mSHOW FIELDS FROM `users`[0m 
    [4;35;1mSQL (0.0ms)[0m [0mSHOW TABLES[0m 
    [4;36;1mUser Load (0.0ms)[0m [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 1) [0m 
    [4;35;1mMembership Load (1.0ms)[0m [0mSELECT * FROM `memberships` WHERE (user_id = 1) LIMIT 1[0m 
    [4;36;1mMembership Load (0.0ms)[0m [0;1mSELECT * FROM `memberships` WHERE (user_id = 1) LIMIT 1[0m 
0

session[:user_id]는 무엇을 상징 하는가? 자신의 인증 시스템을 가동하려고합니까?

당신을 위해 그 기능을 처리 할 수있는 number of authentication solutions이 있습니다.

은 아마 사용하고 싶은,하지만 귀하의 질문에 대답하려면 associations 당신이 두 모델 사이에 설정 한 :

def index 
    @user = User.find(session[:user_id]) 
    @memberships = @user.memberships if @user 
end 

응용 프로그램 전반의 인증 시스템을 사용합니다 (고픈의 여부 만들거나이 가장 가능성이 단순화 될 것이다) 라이브러리를 사용하여 : current_user는 현재 로그인 한 사용자를 반환 ApplicationController에 정의 된 방법과 index ACTI입니다

def index 
    @memberships = current_user.memberships 
end 

에 사용자가 로그인했는지 확인하는 before_filter이 있습니다.

관련 문제