2009-04-15 2 views
2

J'essaie de définir un attribut sur un objet que je crée. Je me sens comme cela devrait fonctionner:Comment définir un attribut lors de la création d'un objet ActiveRecord?

def create 
    @album = Album.new(params[:album]) 
    @album.user = current_user 

    if @album.save 
     flash[:notice] = 'Album was successfully created for ' + current_user.login + '.' 
     redirect_to albums_url 
    else 
     render :action => "new" 
    end 
    end 

Mais il semble ignorer l'affectation au champ user. Des idées?

Répondre

4

En supposant que vos relations de modèle sont configurées correctement *, il est préférable de le faire:

@album = current_user.albums.build(params[:album]) 

— Cela correctement remplir le champ user_id pour le nouvel album à l'ID de l'utilisateur actuel.


* Quelque chose comme:

class User < ActiveRecord::Base 
    has_many :albums 
    . 
    . 
    . 
end 

class Album < ActiveRecord::Base 
    belongs_to :user 
    . 
    . 
    . 
end 
+0

Oui, la hiérarchie des classes est correctement configurée. Donc, je devrais cela à la place de l'appel à Album.new? Quand j'essaye cela, j'obtiens une méthode non définie 'build 'pour # pkaeding

+2

Désolé, il y a eu une erreur dans mon code que j'ai corrigé maintenant. La méthode de construction est sur le tableau des albums de l'utilisateur. Cela étend le nouvel album aux albums appartenant à cet utilisateur, c'est-à-dire qu'il remplit le champ user_id du nouvel album. –

1

La migration de votre album ou votre modèle d'album at-il fait référence à un user_id ou à une relation avec l'utilisateur?

Si ce n'est pas le cas, la base de données n'enregistrera pas cette information même si vous l'avez assignée.

+0

Eh bien, c'était embarrassant. J'ai oublié d'exécuter le script de migration pour configurer cette relation dans la base de données. Merci! – pkaeding

Questions connexes