Rails makevoteable帮助创建用户投票链接和自定义错误消息

时间:2011-06-27 11:05:39

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用gem makevoteable的问题,当页面加载时,帖子会自动升级。用户可以点击并进行投票,而不仅仅是拥有链接。当重新加载页面时,我在视图中获得了AlreadyVotedError。我更喜欢用户友好的错误消息“你已经投了这篇文章”

我的观点:

<% @posts.each do |post| %>
  <h1><%= post.titel %></h1>
  <p><%= post.body_html %></p>
  <p><%= link_to 'asdasdasd', current_user.up_vote(post) %>
<% end %> 

更新:

我的路线.rb:match 'stem_op/:id' => 'posts#vote_up', :as => 'stem_op'

我的公共控制人员:

def vote_up
  @post = Post.find(params[:id])
  current_user.up_vote(@post)
  flash[:message] = 'Thanks for voting!'
  redirect_to post_path(@post)
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'Already voted!'
  redirect_to post_path(@post)
end

我的观点:

<% @posts.each do |post| %>
  <h1><%= post.titel %></h1>
  <p><%= post.body_html %></p>
  <p><%= link_to 'Stem op', stem_op_path(post.id) %> 
  </tr>
<% end %>

当我尝试投票时,我收到了这个错误:

模板丢失 - 我真的需要一个空白视图文件吗?

更新:

def vote_up
  @post = Post.find(params[:id])
  current_user.up_vote(@post)
  flash[:message] = 'Thanks for voting!'
  redirect_to post_path(@post)
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'Already voted!'
  redirect_to post_path(@post)
end

错误:

SyntaxError in PostsController#vote_up

C:/Rails/den/app/controllers/posts_controller.rb:103: syntax error, unexpected keyword_end, expecting $end

1 个答案:

答案 0 :(得分:1)

是的,current_user.up_vote(post)为该用户添加了投票。您需要创建一个执行current_user.up_vote(post)的控制器操作并处理Flash消息。然后,您可以在视图中链接到该操作。

编辑以回答评论:

guides.rubyonrails.org/action_controller_overview

在你的帖子控制器中我想你会想要这样的东西:

def upvote
  @post = Post.find params[:id]
  current_user.upvote(@post)
  flash[:message] = 'Thanks for voting!'
  redirect_to post_path(@post)
rescue MakeVoteable::Exceptions::AlreadyVotedError
  flash[:error] = 'Already voted!'
  redirect_to post_path(@post)
end

在您的路线中,例如:

map.resource :post do
  member do
    post :upvote
  end
end

您的链接将变为link_to 'Upvote!', upvote_post_url(post), :method => :post