Skrypt w widoku

Cześć, piszę sobie aplikację, gdzie user może wrzucać filmy i oceniać je.
Chciałem skorzystać z AJAX’a i jQuery Raty. Biblioteka jest bardzo prosta, wszystko opiera się na stworzeniu krótkiego skryptu.

Próbowałem napisać go normalnie w assetach, za pomocą CoffeScriptu, lecz miałem (i z coffe mam nadal) probelm i rozwiązałem go inaczej.

Wrzuciłem do widoku taki oto kod:

<script type="text/javascript" charset="utf-8"> $(document).ready(function(){ $('#star').raty({ path: '/img-star', <% user_rate = get_user_video_rate(@video.rates) %> <% if user_rate > 0 %> score: <%= user_rate %>, readOnly: true, <% end %> click: function(score, evt) { $.get('<%= video_path @video %>/rate/' + score, function(data) { if(data.indexOf('not_again') == -1 && data.indexOf('not_allowed') == -1) $('#star').html($('#star').html() + '<br />' + data); }); } }); }); </script>
Wszystko pięknie działa, ale wiem, że nie powinno tego się tak robić. Korzystam z Devise, get_user_video_rate to helper.
Problem w tym, że nie wiem jak za pomocą coffiego z zewnątrz poprawnie ustawić ścieżkę $.get’a. Ogólnie nie mam pojęcia czy to jest “ruby way” i nie podoba mi się to.

Jak powinno się to robić, by wszystko było na swoim miejscu?

Pozdrawiam.

#star to jakiś div z gwiazdkami tak? możesz wykorzystać np. data z html5 np.

<div data-url="<%= video_path @video %>" data-rate="<%= user_rate %>" id='star'>

i potem (już w assetach)

url = $('#star').data('url') rate = $('#star').data('rate')
generalnie ten kod nie jest najwyższych lotów (definiowanie zmiennych w widokach itd.) więc i to postaraj sie poprawić :wink:

edit: o, jest nawet railscast o tym - http://railscasts.com/episodes/324-passing-data-to-javascript

A najlepiej - https://github.com/edgarjs/ajaxful-rating :slight_smile:

@konole, dzięki, fajny gem, ale i tak postanowiłem zrobić to tą drogą, w końcu nie wszystko zawsze będzie siedziało w gemach

@zlw, faktycznie, nie mogę jakoś zapamiętać tej fajnej “funkcji” z html5, ale jednak po tym filmie z railscastów użyłem gon’a. Dzięki wielkie, nie widziałem tego wcześniej :wink:

Teraz kod siedzi sobie w coffe i wygląda tak:

$(document).ready -> $('#star').raty path: '/img-star' score: gon.user_rate readOnly: gon.user_rate > 0 click: (score, evt) -> $.post gon.video_rate_path, score: score, (data) -> $('#star').append(data)
Za jakiś czas możliwe, że wrzucę całą appke (to moja pierwsza :rolleyes: ) na githuba, więc jak ktoś by chciał się pośmiać czy coś poradzić to się ucieszę.

Jeśli nie pasuje Ci coffee script to nic nie stoi na przeszkodzie, żebyś pisał w javascript.
Umiesczając plik w assetach nadaj mu po prostu rozszerzenie *.js a nie *.js.coffee.

Ależ mi pasuje Coffe, to nie z tym był problem :wink: