valider et mettre à jour seul attribut rails
J'ai de la suite dans mon modèle d'utilisateur
attr_accessible :avatar, :email
validates_presence_of :email
has_attached_file :avatar # paperclip
validates_attachment_size :avatar,
:less_than => 1.megabyte,
:message => 'Image cannot be larger than 1MB in size',
:if => Proc.new { |imports| !imports.avatar_file_name.blank? }
dans un de mes contrôleurs, je veux SEULEMENT mettre à jour et valider l'avatar champ sans la mise à jour et la validation de l'email.
Comment puis-je faire cela?
par exemple (cela ne fonctionnera pas)
if @user.update_attributes(params[:user])
# do something...
end
J'ai aussi essayé avec update_attribute('avatar', params[:user][:avatar])
, mais ce serait ignorer les validations pour l'avatar terrain.
- En double? stackoverflow.com/questions/457239/...
- non, je pense que
mock.valid?
valide tout. Je suis à la recherche pour valider un seul attribut.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez valider l'attribut à la main et l'utilisation
update_attribute
, que ignore la validation. Si vous ajoutez ceci à votreUser
:Et ensuite mettre à jour l'attribut ainsi:
Vous devriez obtenir votre seul attribut à jour tout seul (manuellement) la validation de l'attribut.
Si vous regardez la façon dont Milan Novota de
valid_attribute?
fonctionne, vous verrez qu'il effectue des validations et puis vérifie si leattr
eu des problèmes; il n'a pas d'importance si l'une des autres validations ont échoué commevalid_attribute?
ne regarde que les échecs de validation de l'attribut que vous êtes intéressé à.Si vous allez faire beaucoup de ce genre de choses alors vous pourriez ajouter une méthode à l'Utilisateur:
et l'utiliser pour mettre à jour votre seul attribut.
update_attribute
. Veuillez voir ma mise à jour.!
là. Merci pour le heads up.Une condition?
Avez-vous essayé de mettre une condition sur la
validates_presence_of :email
?http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000083
Options de Configuration:
Je suis en supposant que vous avez besoin de cela, parce que vous avez un multi-étape de l'assistant, où vous tout d'abord télécharger l'avatar et l'adresse e-mail est remplie plus tard.
À ma connaissance, avec vos validations comme ils sont, je ne vois aucune bonne solution de travail. Soit vous validez toutes les, ou de mettre à jour l'avatar sans validations. Si il serait un simple attribut, vous pouvez vérifier si la nouvelle valeur de la validation réussit séparément, et ensuite mettre à jour le modèle sans validations (par exemple à l'aide de
update_attribute
).Je peux vous proposer deux approches alternatives:
Donc, je proposerais quelque chose comme ceci:
Espère que cette aide.
Voici ma solution.
Elle garde le même comportement que .valide? la méthode, qui renvoie true ou false, et ajouter des erreurs sur le modèle de la sorcière, il a été appelé.