2015-11-25 1 views
0

Je nettoie mon code de mon application Rails. J'utilise le Raty-gem pour mon système de notation. Pour rendre un #average_rating j'utilise un script-bloc (ramassé cela dans un tutoriel) dans les vues spécifiques. Mais puisque j'utilise le #average_rating dans plus de 6 vues différentes, j'espérais que je pourrais le faire plus efficace. J'ai déjà essayé d'utiliser un HelperMethod pour cela, mais je suppose qu'il n'accepte pas 'javascript'.Puis-je créer un ViewHelper pour un bloc javascript?

Script-bloc:

<script> 
$('#average_rating').raty({ 
    path: '', 
    readOnly: true, 
    score: <%= @project.average_rating %> 
}); 
</script> 

Quelle est la façon la plus propre de le faire dans Rails?

Répondre

0

Oui, il existe une méthode plus propre pour définir un bloc JavaScript en utilisant la méthode d'assistance content_for fournie par les rails. Vous pouvez définir un extrait de code à l'intérieur d'un bloc content_for nommé et peut être utilisé n'importe où dans vos vues. par exemple

<% content_for :rating_code do %> 
    $('#average_rating').raty({ 
    path: '', 
    readOnly: true, 
    score: <%= @project.average_rating %> 
    }); 
<% end %> 

Voir la documentation ici: http://apidock.com/rails/ActionView/Helpers/CaptureHelper/content_for

+0

Ok , a l'air simple. Mais où dois-je placer ce bloc de code: dans une méthode d'aide? (il semble qu'il contienne un code de vue) Ou ailleurs? –

+0

Vous pouvez définir le contenu de la balise dans le fichier 'app/views/layouts/application.html.erb' et l'initialiser dans l'une des vues. Le code sera seulement généré dans quelle page vous avez cédé le code comme ceci '<% = yield (: code_tag code)%>' –

+0

Parfait, ça marche! –

0

Si vous avez beaucoup de données à transmettre au JavaScript et que vous voulez garder votre code js dans les fichiers js, vous pouvez utiliser the Gon gem