Contribuez - Création de ressources Ruby
Bonjour à tous.
Nous aimerions développer la section Ruby / RoR de developpez.com.
L'idéal serait de pouvoir créer une FAQ ainsi que quelques tutoriels.
Afin de créer une FAQ, n'hésitez pas à poster en enfilade les questions / réponses qui vous viennent à l'esprit, celles que vous auriez aimé trouver sur un forum, ...
Si vous souhaitez rédiger des articles / tutoriels (initiation, installation, avancé, .....) n'hésitez pas à me contacter par MP.
Vous pouvez également demander un blog sur Developpez.
:merci: d'avance à tous, et n'hésitez pas si vous souhaitez plus de détails.
ActiveRecord::base empty?
Rails
Q: Définir "empty?" pour tous vos modèles
R: "attribute_names" & "attribute_present?"
Vous est-il arrivé de regretter de ne pouvoir écrire quelque chose du genre "@personne.empty?" ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| module ApplicationHelper
...
end
#surcharge ActiveRecord
class ActiveRecord::Base
# renvoi true si aucun attribut n'est renseigné
def empty?
attribute_names.each do |attribute|
return false if attribute_present?(attribute)
end
return true
end
end |
- Dans "application_helper.rb" on ajoute la définition "empty?" à ActiveRecord::Base afin d'en faire bénéficier tous nos modèles de l'application sans autre intervention.
- On itère sur la liste des attributs afin de tester la virginité de chacun.
- On renvoi "false" dès rencontré le premier attribut renseigné
A savoir, "attribute_present?" retourne "false" dans les cas suivants
- l'attribut vaut "nil"
- l'attribut est "empty"
- l'attribut contient "0" (zéro)
test :
Code:
1 2 3 4 5 6 7 8
| irb(main):042:0> @p = Personne.new
=> #<Personne:0x4767bb4 @attributes= ...@new_record=true>
irb(main):043:0> @p.nom
=> nil
irb(main):044:0> @p.nom = ''
=> ""
irb(main):046:0> @p.empty?
=> true |
Pour info : La définition de "attribute_present?" se trouve dans "base.rb" de ActiveRecord (par exemple C:\InstantRails\ruby\lib\ruby\gems\1.8\gems\activerecord-1.15.3\lib\active_record)
Eventuelles suggestions bienvenues