Bonjour
cela doit être un truc con mais je ne le sais pas
que je récupère un tableau de données via @variable =
Variable.find(:all,
:conditions => etc. )
cet objet vide ne sera pas nil ?
en faisant des tests de type
unless @variable then
else
end
la condition ou @variable est nil ne se remplit jamais (même quand il
n’ya
pas de données, je m’entends)
par contre avec @variable.length == 0 cela fonctionne
quelqu’un peut il éclairer ma lanterne ?
merci
Ca ne renvoie nil que dans le cas d’un find(:first), parce que là tu ne
cherche qu’un objet.
Quand tu fais un find(:all) tu demande une collection d’objets, ce qui
est
un proto-tableau, et qui n’est donc :
- pas == nil même quand il est vide
- pas == instance d’un objet métier quand il ne contient qu’une
instance
d’un objet métier
Le 22 août 2008 00:19, Michel B. [email protected] a
écrit :
ok merci de m’éclairer
NG
script/console
@variable = ObjetMetier.find :all
…
@variable.blank?
…
@variable.empty?
…
Remarque en passant, la doc de rails est très lisible, bien construite
et
plutôt complète…
Remarque en passant, la doc de rails est très lisible, bien construite et
plutôt complète…
tu parles des api ?
et bien, je serai plus réservé (gentil euphémisme )
merci
NG
Effectivement, un find(:all) renvoie tojours une Array, éventuellement
vide.
Pour tester s’il n’y a pas de résultat
@variable.empty?
ou @variable.blank?
Moi j’aime bien la méthode blank, car elle permet de tester si (vide ou
nil), donc d’éviter de se poser le genre de question que tu viens de
poser. Elle ne revoie pas d’erreur sur nil.blank?, alors que nil.empty?
entraine une erreur
Michel B. a écrit :
Oui, je parle de la doc de l’api. Ca tombe relativement bien, parce que,
par
exemple, voici ce que dit la doc de la méthode “find” d’un certain
ActiveRecord::Base :
find(*args)
Find operates with four different retrieval approaches:
- Find by
idhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001355-
This can either be a specific
id
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001355(1),
a list of ids (1, 5, 6), or an array of ids ([5, 6, 10]). If no record
can be found for
allhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001301of
the listed ids, then
RecordNotFoundhttp://api.rubyonrails.org/classes/ActiveRecord/RecordNotFound.htmlwill
be raised.
- Find
firsthttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001299-
This will return the
first
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001299record
matched by the options used. These options can either be specific
conditions or merely an order. If no record can be matched, nil is
returned. Use
Model.find(:firsthttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001299,
*args) or its shortcut Model.first(*args).
- Find
lasthttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001300-
This will return the
last
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001300record
matched by the options used. These options can either be specific
conditions or merely an order. If no record can be matched, nil is
returned. Use
Model.find(:lasthttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001300,
*args) or its shortcut Model.last(*args).
- Find
allhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001301-
This will return
all
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001301the
records matched by the options used. If no records are found, an empty
array is returned. Use
Model.find(:allhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001301,
*args) or its shortcut Model.all(*args).
All approaches accept an options
hashhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001387as
their
last
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001300parameter
Après, peut-être que tu ne sais pas lire l’anglais, mais si la langue de
Shakespear n’est pas un obstacle pour toi j’ai l’impression que c’est
assez
clair non ?
–
Michel B.
2008/8/22 Michel B. [email protected]
can be found for allhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001301of the listed ids, then
*args) or its shortcut Model.last(*args).
Shakespear n’est pas un obstacle pour toi j’ai l’impression que c’est assez
clair non ?
–
Michel B.
En effet mon anglais technique est parfois un peu limite pour la doc,
et
j’ai été un peu moqueur, reste que pour retrouver une chose précise
parfois
c’est pas évident.
Tiens j’ai des select dont le hash est situé dans le model
model todo.rb
PRIORITY = [
[ “Urgent” , “1” ],
[ “Rapidement” , “2” ],
[ “Bientôt” , “3” ],
[ “Y penser” , “4” ],
[ “Quant on peut” , “5” ],
]
et la vue edit (idem new)
<%= f.label "Priorité" %><br />
<%= select "todo",
"priority",
Todo::PRIORITY,
:prompt => "Quelle priorité ?"
%>
dans les autres appli en rails 1.2.x aucun problème
mais là la vue edit ne me ressort pas ce qui a été choisi au départ
et bien dans l’api j’ai du mal à trouver … (et j’en profite pour
replacer
un problème en cours )
Je ne prétends pas que l’API est parfaite, mais quand on pose une
question Ã
laquelle l’API répond dans les premières lignes de la méthode concernée,
c’est probablement qu’on n’a pas essayé de la lire.
Ce n’est pas répréhensible en soi (la preuve, je t’ai répondu) mais bon,
n’accuse pas l’API d’être illisible si tu ne fais pas l’effort de la
lire de
temps en temps pour résoudre des petits problèmes il est logique que tu
ne
soit pas à l’aise pour trouver des choses pointues.
Pour ton problème de select, il vaudrait mieux poser la question dans un
autre thread (et il n’est pas impensable que j’essaye d’y répondre quand
tu
y auras donné quelques détails).
Cordialement.
–
Michel B.
Le 22 août 2008 17:08, Michel B. [email protected] a
écrit :
Je ne prétends pas que l’API est parfaite, mais quand on pose une question
à laquelle l’API répond dans les premières lignes de la méthode concernée,
c’est probablement qu’on n’a pas essayé de la lire.
Ce n’est pas répréhensible en soi (la preuve, je t’ai répondu) mais bon,
n’accuse pas l’API d’être illisible si tu ne fais pas l’effort de la lire de
temps en temps pour résoudre des petits problèmes il est logique que tu ne
soit pas à l’aise pour trouver des choses pointues.
c’est sur …
Il est vrai que les premiers contacts n’ayant pas été très concluants je
n’ai pas fouillé plus loin (on dirait une séance d’autocritique dans le
plus
pur style maoiste )
Merci en tout cas .
NG