2010-05-10 5 views
4

J'ai deux modèles, utilisateur et compte. Chaque utilisateur peut avoir un compte.has_one problème de mise à jour

La création d'un compte pour un utilisateur fonctionne correctement. Mon problème est que lorsque j'essaie de mettre à jour le compte, les comptes précédents user_id sont annulés et une nouvelle ligne de compte est créée avec l'id_utilisateur. Je ne veux pas que cela arrive. Je veux mettre à jour la ligne existante avec les changements au compte. Comment puis-je faire cela?

Merci.

+1

Montrez-nous du code. – ryeguy

+0

Pourriez-vous s'il vous plaît poster le code que vous utilisez pour l'action 'update'? –

+0

@account = @ user.account.build (params [: compte]); si @ account.save ... autre ... fin –

Répondre

3

Avec ce code

@account = @user.account.build(params[:account]) 
if @account.save 
    #... 
else 
    #... 
end 

vous construisez une nouvelle account. Ce dont vous avez besoin est de mettre à jour

if @account.update_attributes(params[:account]) 
    #... 
else 
    #... 
end 
+0

update_attributes est plus élégante que la mise à jour dans cette situation ... bon appel – Schneems

+0

apparemment j'ai perdu ma « solution acceptée » pour cet avis :(bye bye points – Schneems

+0

hahah ça arrive = P –

1

Puisque vous n'avez pas fourni de code permet de dire que c'est la façon dont vous créez un utilisateur

user = User.create(:name => "bob") 

Ensuite, vous pouvez associer l'utilisateur à un compte en spécifiant le user_id

account = Account.create(:user_id =>user.id, :status => "not activated") 

Maintenant disons que nous voulons changer le statut du compte. Nous pouvons appeler la méthode mise à jour dans des rails http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002270 comme ceci:

Account.update(account.id, :status => "activated") 

je peux être plus utile avec plus d'informations.