Sam nie wiem czy to jednak dobra odpowiedź, może dokładnie opiszę z czym mam problem.
Mam prosty system głosowania (przykładowy element):
<div class="points pull-left">
<a rel="nofollow" data-remote="true" data-method="post" href="/entry_votes?id=129">+</a>
<span id="entry129">0</span>
</div>
Po kliknięciu “+” odpala się EntryVotes#create, który dodaje w tabeli entry_votes nowy wpis (entry_id, user_id), i generuje view create.js.erb:
$("#entry<%=@entry.id%>").html("<%=@entry.points_count%>")
$("#entry<%=@entry.id%>").siblings().replaceWith('<%= link_to "-",entry_vote_path(id: @entry.id),method: :delete, remote: true, class: "unvote"%>')
Odpowiednio “-” i destroy.js.erb:
$("#entry<%=@entry.id%>").html("<%=@entry.points_count%>");
$("#entry<%=@entry.id%>").siblings().replaceWith('<%=link_to "+",entry_votes_path(id: @entry.id),method: :post,remote: true %>');
I to działa tak jak powinno działać.
Chciałem na tych linkach ustawić onClick, ale przy replaceWith pojawia się nowy element i ten onClick wraz ze starym linkiem mi znika.
Więc pomyślałem, że zamiast replaceWith po prostu podmienię część parametrów linka.
Tak, żeby create.js.erb wyglądał np. tak:
$("#entry<%=@entry.id%>").html("<%=@entry.points_count%>")
$("#entry<%=@entry.id%>").siblings().attr("data-method","delete").attr("href","<%=entry_votes_path(id: @entry.id)%>").addClass("unvote").html("-")
No i działa to tak, że klikam “+”, licznik mi się zwiększa, “+” zamienia się w “-”, w linku pojawia się data-method = delete, class ustawia się na unvote. Wszystko przy podglądzie źródła strony jest identycznie jak wtedy gdy podmieniałem cały link. Niestety link działa jednak tak jakby dalej był tym od create. Czyli wysyła POST, zamiast DELETE. Będę wdzięczny za info, dlaczego tak się dzieje.