2010-08-01 3 views
0

J'ai un modèle User et Group. Userhas_manyGroups et Groupbelongs_toUserassociations dans les rails de l'extrémité avant

J'ai déjà entrées dans la table utilisateur:

id name 
-------------- 
1  testuser 
2  someotheruser 

si l'utilisateur Imaginer avec identifiant 1 (testuser) est connecté et je veux créer des groupes à l'intérieur de cet utilisateur.

Lorsque je crée un nouveau groupe de nouvelle action dans le contrôleur du groupe les entrées de la base de données va comme ceci:

id groupname user_id 
    ------------------------ 
    1 groupA 
    2 groupB 

comme vous le voyez, user_id, colonne va toujours aussi vide si l'association est pas ici.

Que dois-je faire pour créer cette association?

code pour GroupsController:

def new 
    @group = Group.new 
    end 

    def create 
    @group = Group.new(params[:group]) 
    if @group.save 
     flash[:notice] = "Successfully created group." 
     redirect_to groups_url 
    else 
     render :action => 'new' 
    end 
    end 

code pour views/groups/new.html.erb

<% title "New Group" %> 

<% form_for @group do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_field :description %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 


<p><%= link_to "Back to List", groups_path %></p> 

Je suis nouveau sur les rails s'il vous plaît me dire comment faire l'association avec l'utilisateur. A partir de la console que je suis capable de faire l'association en ajoutant des groupes pour un utilisateur comme ceci:

@u = User.find(1) 
@u.groups.create(:groupname=>"groupA") 
@u.save 

mais je ne sais pas comment obtenir ce fait de l'extrémité avant.

Répondre

0

D'abord, vous aurez envie de vous assurer qu'un groupe ne peut pas être sauvé sans utilisateur:

/app/models/group.rb

class Group 
    belongs_to :user 
    validates_presence_of :user 
end 

Ensuite, permet par défaut de la groupe à être l'utilisateur actuel.

/app/controllers/groups_controller.rb

def create 
    @group = Group.new(params[:group]) 
    @group.user = current.user 
    if @group.save 
    ... 
    else 
    ... 
    end 
end 

Vous pouvez également faire un @group.user = current_user if @group.user.nil?, mais il semble que la seule personne pour créer un groupe sera l'utilisateur actuel.

+0

merci, je vais essayer ça. J'allais essayer l'approche de passer le champ caché avec user_id mais c'est beaucoup mieux – Patrick

0

Vous devez vous assurer que votre nom d'utilisateur fait partie des paramètres passés à Group.new, peut-être quelque chose comme ceci:

def create 
    @group = Group.new(params[:group].merge!({:user_id => current_user})) 
    if @group.save 
    flash[:notice] = "Successfully created group." 
    redirect_to groups_url 
    else 
    render :action => 'new' 
    end 
end 

Vous voudrez peut-être ajouter un flash [: erreur] dans votre clause else sinon, il serait déroutant pour l'utilisateur de se retrouver sur la nouvelle action sans explication.

Questions connexes