2009-08-28 8 views
1

Je suis en train d'ajouter des variables d'instance dans les aides comme ce qui suit:Les variables d'instance ajoutées dans les rails d'aide ne sont pas disponibles dans les vues (modèles)?

module ApplicationHelper 
def title=(title) 
    @title = title 
end 

def title 
    @title 
end 
end 

et quand je titre dans les vues attribuer/pages/index.html.erb comme ce qui suit:

<% title = 'Listing Pages' %> 

et essayez de le montrer dans les vues/layouts/application.html.erb comme ce qui suit:

<%= title %> 

il montre que « » et après un certain débogage, ressemble @title est de ne pas s et.

Pourquoi les variables d'instance ajoutées dans les aides ne sont-elles pas disponibles dans les vues (modèles)?

Merci d'avance.

+1

Pour votre information, vous pouvez mettre en œuvre le getter et setter dans une ligne à l'aide attr_accessor. –

Répondre

2

Je pense que Ruby pense que ce que vous faites dans

title = 'Listing Pages' 

est aussi l'affectation à une variable locale title.

Essayez de le préfixe avec self et voir si elle aide:

self.title = 'Listing Pages' 
+0

@Milan: merci beaucoup, cela a résolu le problème. Existe-t-il un autre moyen de faire comprendre à ruby ​​que ce que nous essayons de faire, c'est d'essayer d'appeler la méthode au lieu d'y ajouter un préfixe? – Dharam

+1

Je ne pense pas qu'il y ait un meilleur moyen. C'est ainsi que fonctionne l'interprète. La meilleure façon d'éviter ce genre de problème est de regarder ce modèle "a = b" et d'y réfléchir un peu. La règle générale est la suivante: lorsque vous affectez via une méthode setter dans une instance, ajoutez-la toujours avec soi-même. –

+0

Une solution de contournement possible: Nommez votre méthode setter quelque chose comme set_title au lieu de title =. Ensuite, vous n'aurez pas besoin de vous ajouter et de l'utiliser comme ceci: set_tile "Listing pages" –

Questions connexes