这是用户投票显示的当前帖子:
控制器/ votes_controller.rb:
class VotesController < ApplicationController
def vote_up
@post = Post.find(params[:id])
if @post.votes.exists?(:user_id => current_user.id)
@notice = 'You already voted'
else
@vote = @post.votes.create(:user_id => current_user.id, :polarity => 1)
end
respond_to do |format|
format.js
end
end
这会使用Ajax更新投票总数:
vote_up.js.erb:
<% unless @notice.blank? %>
alert("<%= @notice %>");
<% end %>
<% unless @vote.blank? %>
$('.post-<%=@post.id%> span.vote-count').html('<%= @post.votes.count %>');
$('.post-<%=@post.id%> div.voted-user').html('<% @post.votes.each do |vote| %><%= link_to vote.user.username, vote.user %><% end %>');
<% end %>
这是展示视图中的投票链接:
视图/帖/ show.html.erb:
<%= link_to "Vote Up", vote_up_path(@post), :remote => true, :class => "vote-up" %><br />
以及操作的路由:
routes.rb中:
get 'votes/:id/vote_up' => 'votes#vote_up', as: 'vote_up'
这是所有帖子在索引视图中的显示方式:
视图/帖/ index.html.erb:
<% @posts.each do |post| %>
<h2>Title: <%= post.title %></h2>
<p>Author: <%= post.user.username %></p>
<p>Created At: <%= post.created_at %></p>
<p>Content: <%= post.content %></p>
<p>Votes: <%= post.total_votes %></p>
<p>Comments: <%= post.comments_count %></p>
<ul>
<li><%= link_to 'Show', post %></li>
<li><%= link_to 'Edit', edit_post_path(post) %></li>
<li><%= link_to 'Destroy', post, confirm: 'Are you sure?', method: :delete %></li>
</ul>
<br />
<% end %>
我想在每个帖子的index.html.erb
视图中添加投票链接,或者在索引视图中找到触发每个帖子的vote_up
操作的方法。有什么建议可以实现吗?
答案 0 :(得分:1)
我认为我必须完全忽略这一点,但为什么你不能在显示每个帖子的区块内执行以下操作?
<%= link_to "Vote Up", vote_up_path(post), :remote => true, :class => "vote-up" %>
请注意,我使用post
而不是@post
。