2009-11-19 9 views
3

Je suis nouveau sur les rails si désolé si parfois je n'ai pas beaucoup de sens. Voici ce que j'essaie de faire. J'essaie de construire un système de vote. Donc, à côté d'un article de blog, il y a un lien qui dit «vote» (dira probablement comme plus tard). Jusqu'ici j'ai travaillé: quand le bouton de vote est cliqué, une valeur de '1' est livrée à la table de vote et alors que les affichages de vote de messages particuliers s'affichent sous le vote via AJAX (j'ai copié une fonctionnalité de commentaire). Au lieu de rendre tous les nombres '1' ci-dessous, je veux qu'il rende le compte mis à jour.Afficher le nombre de dossiers - Ruby on Rails - Ajax

Mon tableau de vote contient les colonnes 'vote' et 'post_id' qui ont bien été entrées. Ma pensée était que je pourrais juste changer mon modèle partiel pour faire ceci. Voici le code:

votes_controller:

class VotesController < ApplicationController 

    def create 
    @post = Post.find(params[:post_id]) 
    @vote = @post.votes.create!(params[:vote]) 

    respond_to do |format| 
     format.html { redirect_to @post} 
     format.js 
    end 
    end 
end 

    def count 
    @post = Post.find(params[:post_id]) 
    @vote = calculate :count 

     respond_to do |format| 
     format.html { redirect_to @post} 
     format.js 
    end 
    end 
end 

Voici la page où est est affiché, /posts/show.html.erb:

<div id="backto"<%= link_to 'Back to all BattleCries', posts_path %></div> 
<%= render :partial => @post %><br/> 


<p5>Add a Comment</p5> 
<div id="belt"> 
    <div id="belttext"> 
<% remote_form_for [@post, Comment.new] do |f| %> 
    <p> 
     <%= f.text_area (:body, :class => "commentarea") %> 
    </p> 
    <%= f.submit "Add Comment"%> 
<% end %> 
</div> 
<div id="beltbottom"> 
</div> 
</div><br/> 
<br/><p5>Comment Stream </p5> 
<div id="comments"> 
    <%= render :partial => @post.comments %> 

</div> 

<p> 
<% remote_form_for [@post, Vote.new] do |f| %> 
    <p> 

     <%= f.hidden_field :vote, :value => '1' %> 
    </p> 
    <%= f.submit "Vote" %> 
<% end %> 
<div id="vote"> 
<div id="votes"> 
    <%= render :partial => @post.votes %> 
</div> 
</div> 
</p> 

Voici le: partiel/votes/_vote.html.erb: (c'est là que je pensais que je devrais juste le changer pour voter.count, ou post.count ou quelque chose, mais ne peut pas le faire fonctionner).

<% div_for vote do %> 

     <%= h(vote.vote) %> 
    <% end %> 

Voici le fichier /votes/create.js.rjs:

page.insert_html :bottom, :votes, :partial => @vote 
page[@vote].visual_effect :highlight 

J'espère que tout cela est logique.

Répondre

2

Je pense qu'il est répéter parce que vos .rjs est « insérer au fond » de la div au lieu de « remplacer » ... vous voulez probablement page.replace_html

Il serait préférable d'avoir un DIV ou SPAN tag qui contient le nombre de votes pour un post ... alors votre fichier .rjs met à jour le inner_html du DIV avec le nombre de votes (qui serait @ post.votes.count) ... Je ne pense pas que vous ayez vraiment besoin un partiel.

2

Vous voulez probablement:

<%= @post.votes.count %> 
+0

il ne fait que le répéter. 3 – bgadoci

1

Vous voulez aussi probablement utiliser replace au lieu de insert_html - ce que cela a du sens? Insérer ajoute juste plus d'éléments au DOM, tandis que remplacer remplacera l'élément.