2014-05-19 2 views
0

Il y a le code suivant:Comment mettre à jour seulement la liste des attributs Rails?

@owner = Owner.find(params[:id]) 
if @owner.update(owner_params) 
    # Some actions 
else 
    render 'edit' 
end 

modèle 'propriétaire' a le nom, email, téléphone et 2 attributs virtuels (pour has_secure_password): mot de passe et password_confirmation. Je veux mettre à jour que le nom, email et par téléphone:

def owner_params 
    params.require(:owner).permit(:name, :email, :phone) 
end 

Mais lorsque je tente de mettre à jour le propriétaire je reçois un message sur mot de passe vide, parce que j'utilise la validation de présence pour le mot de passe lors de la création. S'il vous plaît, dites-moi, est-il possible de mettre à jour seulement la liste des attributs d'envoi en passant les validations d'autres? Merci d'avance.

+0

que diriez-vous 'hidden_field'? pas sûr .. – Nithin

+0

utilisez-vous concevoir pour l'authentification? – RSB

Répondre

-1

Utilisez plutôt #update_attributes. Il semble que #update exécute la validation pour tous les paramètres (même avec les paramètres manquants).

+1

Il n'y a pas de différence entre 'update' et' update_attributes', 'update' a été introduit dans les rails 4 – RSB

+0

Oui. Batter vérifier avant la réponse –

0

Si vous utilisez Devise pour l'authentification alors il y a une méthode nommée update_without_password, faire de cette façon

@owner.update_without_password(owner_params) 
0

Hope this une aide.

mettre has_secure_password validations: false fonctionnerait, mais vous devez vous personnalisés après validation il

Questions connexes