2010-10-21 8 views
1

J'essaie de comprendre les bases de l'authentification dans Rails. Pour commencer, j'ai utilisé le générateur nifty_authentication de Ryan Bates. Il m'aide à apprendre les options de base pour les connexions utilisateur, etc.Liste de cadeaux d'authentification Rails pour chaque utilisateur?

J'ai une application simple avec une table de personnes et de cadeaux dans la base de données. L'idée est, chaque utilisateur crée une liste de personnes et ensuite attribué des cadeaux possibles à chacune de ces personnes.

D'un point de vue structurel:

person belongs to user 
gift belongs to person 

J'ai donc les modèles mis en place comme suit.

modèle personne

class Person < ActiveRecord::Base 
has_many :gifts 
end 

modèle cadeau

class Gift < ActiveRecord::Base 
belongs_to :person 
end 

modèle utilisateur

currently doesn't contain any belongs_to has_many etc. 

Comment puis-je aller au sujet s'assurer que chaque utilisateur a sa propre liste de personnes. Ainsi, un utilisateur ne peut pas voir une autre liste d'utilisateurs ou de cadeaux. Est-ce que j'ajouterais simplement ce qui suit au modèle de l'utilisateur?

has_many :people 

et le modèle de personne suivant?

belongs_to :user 

Cela fonctionnerait-il ou est-ce que quelque chose me manque?

Merci,

Danny

MISE À JOUR: L'application jusqu'à présent est sur Heroku et Github.

http://giftapp.heroku.com/

http://github.com/dannyweb/GiftApp

Répondre

1

Est-ce que le travail, ou suis-je manque quelque chose ?

Réponse très courte: oui cela fonctionnerait; Non, vous ne manquez pas quelque chose.


J'ai regardé votre code.

Au lieu de:

def index 
    @people = Person.find(:all) 
end 

Vous devez quelque chose le long des lignes de:

def index 
    @people = current_user.people 
end 

current_user est l'objet User qui fait référence à l'utilisateur connecté.

Dans la méthode create vous devez assigner la personne nouvellement créée à la current_user:

def create 
    @person = Person.new(params[:person]) 
    @person.user = current_user # This associates @person with current_user 
    if @person.save 
    flash[:notice] = "Successfully created person." 
    redirect_to @person 
    else 
    render :action => 'new' 
    end 
end 
+0

OK, merci. J'ai fait les changements que j'ai suggérés et ajouté une colonne dans la table des personnes appelée user_id. Tout fonctionne, cependant, tout le monde peut voir tous les gens. C'est toujours une grande liste communale. – dannymcc

+0

Lors de l'affichage de la liste des personnes, vous aurez besoin de quelque chose comme 'current_user.people' au lieu de' Person.all'. Je ne connais pas le générateur nifty_authentication, mais il devrait fournir un objet pour l'utilisateur connecté. – Mischa

+0

Dans les vues ou le contrôleur de personnes? – dannymcc

Questions connexes