2009-11-19 3 views
3

Я новичок в рельсах, так что извините, если иногда я не имею никакого смысла. Вот что я пытаюсь сделать. Я пытаюсь создать систему голосования. Итак, рядом с сообщением в блоге есть ссылка, в которой говорится «голос» (вероятно, это будет сказано позже). До сих пор я работаю: когда нажата кнопка голосования, значение «1» доставляется в таблицу голосования, а затем записи конкретных записей за столом отображаются под голосованием через AJAX (я скопировал функциональность комментариев). Вместо того, чтобы показывать все число «1» ниже, я хочу, чтобы он отображал обновленный счетчик.Показан счетчик записей - Ruby on Rails - Ajax

Моя таблица голосования имеет столбцы «vote» и «post_id», которые успешно вводятся. Я думал, что могу просто изменить свой частичный шаблон, чтобы сделать это. Вот код:

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 

Вот страница, где показывает, /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> 

Здесь: частично,/голосов/_vote.html.erb: (вот где я думал, что мне просто нужно будет изменить его на vote.count, или post.count или что-то, но не может заставить его работать).

<% div_for vote do %> 

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

Вот /votes/create.js.rjs файл:

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

Я надеюсь, что все это имеет смысл.

ответ

2

Я думаю, что это повторять, потому что ваш .rjs является «вставляя в дне» DIV вместо «вместо» ... Вы, вероятно, хотите page.replace_html

Было бы лучше иметь DIV или SPAN тег, который содержит количество голосов за сообщение ... тогда ваш файл .rjs обновит внутренний_страница DIV с количеством голосов (которое будет @ post.votes.count) ... Я не думаю, что вам действительно нужно частичный.

2

Вы, вероятно, хотите:

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

он делает, но повторяет его. 3 – bgadoci

1

Вы также, вероятно, хотите использовать replace вместо insert_html - это делает смысл? Вставка - это просто добавление большего количества элементов в DOM, тогда как замена заменит элемент.