Je suis nouveau sur les rails alors allez-y doucement. J'ai créé un blog et j'essaie d'ajouter une fonctionnalité de type "vote up" à la page /posts/index.html.erb. Un peu comme la fonction de Facebook. J'ai réussi à faire fonctionner le formulaire de vote. J'ai réussi à obtenir les messages rendus par le <% @ posts.each do | post | %> appel. Voici où j'ai le problème. Je dis alors index, dans le ci-dessus, pour rendre également pour chaque poste le formulaire de vote et aussi le <% = post.votes.count%> pour afficher le total des votes pour chaque publication et permettre de soumettre le formulaire pour chaque publication. J'utilise AJAX pour permettre à tout cela de fonctionner ensemble.Ruby on Rails - Problème AJAX - div
En raison du fonctionnement de mon /votes/create.js.rjs, j'envoie le résultat à div id = "votes", et dans le <% @ posts.each do | post | %> I wrap <% = post.votes.count%> dans la balise div de votes. Mais lorsque create.js.rjs envoie les données, il ne met à jour que la première balise div sur la page html rendue. Donc, si vous pouvez imaginer, comme sur Facebook, lorsque vous cliquez sur le fait que vous aimez quelque chose, la mise à jour ne se fait pas sur le post que vous venez de cliquer mais en haut de la page sur un autre article, le premier message. Le nombre de votes est représenté à partir de l'élément sur lequel vous avez cliqué, mais sur le mauvais enregistrement.
Voici le code:
POTEAUX/index.html.erb
<% @posts.each do |post| %>
<%= render :partial => post %>
<%= render :partial => @post %>
<div id="beltcomments">
<div id="beltcommenttext">
<div id="votebutton">
<% remote_form_for [ post, Vote.new] do |f| %>
<%= f.hidden_field :vote, :value => '1' %>
<%= submit_tag '', :class => 'voteup' %>
</div>
<div id="vote"><br/>
<%= post.votes.count %> People like the above BattleCry. <br/>
<%= link_to "Comments (#{post.comments.count})", post %>
</div>
</div>
</div>
<br/>
<br/>
<br/>
<br/>
<% end %>
<% end %>
<div id="commenttime">
Copyright 2009, My Life BattleCry, LLC.
</div>
/POSTS/CREATE.JS.RJS
page.replace_html :votes, :partial => @vote
page[@vote].visual_effect :highlight
/POSTS/_VOTE.HTML.ERB
<% div_for vote do %>
<%= @post.votes.count %> with your vote. Awesome!!!
<div id="commenttime">
Thanks for your vote. <br/>
</div>
<% end %>
C'est exactement ce qui se passe. Je pense que je pourrais conduire un peu plus d'aide à la navigation avec où mettre ce qui précède. Par exemple, est-ce que je remplace l'actuel <% @ posts.do chaque | %> avec le code ci-dessus, ou est-ce que je l'ajoute en dessous? De plus, dois-je changer le /votes/create.js.rjs pour représenter "vote - # {i}" et quelle est la syntaxe correcte pour cela.Enfin, dois-je ajouter quelque chose à votes_controller.rb pour le transmettre comme vous le dites? J'espérais qu'il y avait quelque chose qui faisait ça. Merci et laissez-moi savoir sur ce qui précède si vous le pouvez. – bgadoci
Correct, vous remplacez l'actuel <% @ posts.do chaque | %>. Correct, vous devrez vérifier dans les rjs pour chercher quelque chose comme "vote - # {i} (mais voir le paragraphe suivant d'abord) Correct, vous auriez besoin de passer cela au contrôleur, de passer aux rjs Cela peut être réalisé en ajoutant: with => i à la forme_remote_for ou en créant un autre champ caché qui contient la valeur de i pour chaque div. Il sera ensuite envoyé avec le formulaire et vous pouvez simplement utiliser "vote - # { params [: i]} "pour obtenir la valeur – Lukas