Has_attachment validation

Bonjour,

J’ai une petite question concernant le plugin has_attachment. Pour un
meme model, peut-on valider ou non certains champs selon la vue ou
l’action qui lui est associee?

Exemple :

J’ai un model Document, qui est has_attachment.

Je voudrais obliger la validation de l’attachment (le fichier) en
creation (new document) et ne pas l’obliger en edition (edit
document).

Comment faire?

On Fri, Jun 6, 2008 at 1:54 AM, Thomas [email protected]
wrote:

Je voudrais obliger la validation de l’attachment (le fichier) en
creation (new document) et ne pas l’obliger en edition (edit
document).

Comment faire?

Ce qu’il faut c’est remplacer la methode :

  def validates_as_attachment
    validates_presence_of :size, :content_type, :filename
    validate :attachment_attributes_valid?
  end

que tu dois utiliser pour valider et mettre à la main ces validations
et ajouter des :if dedans. Tu créera ensuite une methode qui update
sans validation qui rempli la condition du if.

Enfin dans ton edit ou new tu appeles la methode qui valid ou pas. Il
faut toujours déporter la logique dans le model. Le model ne peux pas
savoir si c’est edit ou new qui l’appele.


Cyril M.

Le 6 juin 2008 09:26, Cyril M. a écrit :

On Fri, Jun 6, 2008 at 1:54 AM, Thomas wrote:

   validate :attachment_attributes_valid?
 end

que tu dois utiliser pour valider et mettre à la main ces validations
et ajouter des :if dedans. Tu créera ensuite une methode qui update
sans validation qui rempli la condition du if.

Ce n’est pas plus simple d’écrire :

validates_presence_of :size, :content_type, :filename, :on => :create
validate_on_create :attachment_attributes_valid?

que d’utiliser :if

Enfin dans ton edit ou new tu appeles la methode qui valid ou pas.

C’est généralement dans les actions create et update, non ?

Il faut toujours déporter la logique dans le model. Le model ne peux pas
savoir si c’est edit ou new qui l’appele.

– Jean-François.


http://twitter.com/underflow_

Oui, ce que dit Cyril marche mais depuis j’ai change pour:

(dans le modele document.rb)

validate_on_create do |document|
document.must_have_a_file
end

def must_have_a_file
errors.add(‘You need to upload a file.’, ‘’) if filename.blank?
end

Merci!