2009-09-22 9 views
0

J'ai deux modèles appelés utilisateur et adhésion. utilisateur has_many: adhésions membres belongs_to: l'utilisateurBonne façon de trouver des enregistrements pour une certaine clé étrangère

Quelle est la bonne façon de modifier la méthode d'index de MembershipsController pour définir @memberships à toutes les adhésions il y a pour l'utilisateur « session [: user_id] »?

J'ai essayé quelque chose comme: @memberships = Membership.find (: all,: conditions => [ "user_id =?", Session [: user_id]])

mais Rails est la sélection des utilisateurs à la place d'appartenances:

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 

Répondre

0

L'ID utilisateur n'était pas défini correctement.

script/console:

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

Journaux:

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

Qu'est-session[:user_id] représente? Essayez-vous de lancer votre propre système d'authentification?

Il ya un number of authentication solutions qui peut gérer les tenants et les aboutissants de cela pour vous.

Pour répondre à votre question si, vous voulez probablement faire un usage de la associations que vous avez mis en place entre les deux modèles:

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

Utilisation d'un système d'authentification à l'échelle application (si votre own- fabriquer ou utiliser une bibliothèque), ce serait très probablement simplifié à:

def index 
    @memberships = current_user.memberships 
end 

current_user est une méthode définie dans ApplicationController qui renvoie l'utilisateur actuellement connecté et index Acti sur a before_filter qui garantit que l'utilisateur est connecté.

Questions connexes