Closed TimGoulain closed 9 years ago
En fait la plupart des helpers prennent l'objet principal en argument (pas vraiment une convention mais c'est comme ça en pratique).
Si tu as un ProjectsHelper
avec un méthode project_owner
, ça va donner :
module ProjectsHelper
def project_owner(project)
project.user.name
end
end
Et il s'appelle comme ça (par exemple dans un div
avec la classe author
, en supposant que tu as bien la variable @project
) :
.author= project_owner(@project)
Donc dans ton cas, quelques trucs à changer :
offer
en argument de la méthode.if
, c'est un double-égal pour vérifier l'égalité (sinon tu assignes la valeur "Hotel" à l'attribut offer.sector.code
)fa.fa-bed
va forcément causer une erreur (tu appelles la méthode fa-bed
sur l'objet fa
qui n'existe bien-sûr pas). Il va te falloir les quotes "fa.fa-bed".Petit point aussi sur ton analyse de l'erreur. Il ne connait pas la méthode sector
sur l'objet nul. En gros il te dit qu'il a exécuté nil.sector
. En regardant la ligne, tu vois que @offer
est nul.
Ca donnerait quelque chose comme ça :
module OffersHelper
def sector_image(offer)
if offer.sector.code == "Hotel"
'fa.fa-bed'
elsif offer.sector.code == "Restaurant"
'fa.fa-blablabla'
end
end
end
Légère amélioration, tu stockes la variable offer.sector.code
histoire d'être un peu plus DRY.
module OffersHelper
def sector_image(offer)
sector_code = offer.sector.code
if sector_code == "Hotel"
'fa.fa-bed'
elsif sector_code == "Restaurant"
'fa.fa-blablabla'
end
end
end
Ou bien tu utilises un case.
Et pour l'appeler, ça va te faire un truc de ce style :
.offer
.sector-img
%b{class: sector_image(@offer)}
...
En regardant ça en fait ton helper devrait uniquement renvoyer 'fa-bed'
, puisque l'image aura la classe fa
dans tous les cas.
Et le haml donnera :
%b.fa{class: sector_image(@offer)}
Bon, j'ai quelques soucis avec mon helper... Il ressemble à cela :
Et ça me donne : undefined method `sector' for nil:NilClass J'avoue ne pas comprendre le message d'erreur... J'ai aucun secteur dont la valeur est nil (je crois) Qu'en penses-tu ?