2015-11-25 3 views
0

Я очищаю свой код моего Rails-приложения. Я использую Raty-gem для моей рейтинговой системы. Для рендеринга #average_rating я использую блок сценариев (выбранный в некоторых учебниках) в конкретных представлениях. Но так как я использую #average_rating в более чем 6 разных представлениях, я надеялся, что смогу сделать это более эффективным. Я уже пытался использовать HelperMethod для него, но думаю, что он не принимает «javascript».Могу ли я создать ViewHelper для javascript-блока?

Script-блок:

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

Что такое чистый способ сделать это в Rails?

ответ

0

Да, есть более чистый способ определения блока JavaScript с использованием вспомогательного метода content_for, предоставляемого рельсами. Вы можете определить фрагмент кода внутри именованного блока content_for и его можно использовать в любом месте вашего вида. например

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

См документации здесь: http://apidock.com/rails/ActionView/Helpers/CaptureHelper/content_for

+0

Хорошо , выглядит просто. Но где я помещаю этот блок кода: в вспомогательном методе? (похоже, что он содержит код вида) Или где-то еще? –

+0

Вы можете определить контент для тега в файле 'app/views/layouts/application.html.erb' и инициализировать его в любом из представлений. Код будет генерироваться только на той странице, на которой вы получаете код, подобный этому '<% = yield (: code_tag_name)%>' –

+0

Perfect, он работает! –

0

Если у вас есть много данных, чтобы передать на JavaScript, и вы хотите сохранить ваш код JS в JS-файлов, вы можете использовать the Gon gem