我想要添加的是一个按钮,当按下时,将“准确度”值增加1.我看了很多很多StackOverflow解决方案,但到目前为止它们都没有对我有用。我正在使用同事的代码,如果有帮助,大部分内容都来自Ruby on Rails教科书(“通过示例学习Rails”),可能会被黑客攻击。
我的观点如下:
<%= link_to 'Accurate2', :action => :vote_up, :id => @post.id%>
我的代码如下:
def vote_up
#in posts_controller.rb
@post = Post.find(params[:id])
@post.rate_it( 1, current_user.id ) #with "acts_as_rateable" plugin
@post.save
我的路由如下:
resources :users do
resources :comments
resources :posts
end
resources :posts do
resources :comments
match "vote_up", :on => :collection
match "vote_down", :on => :collection
end
我收到的错误是:
http://localhost:3000/posts/vote_up?id=1
CanCan::AccessDenied in PostsController#vote_up
You are not authorized to access this page.
Parameters:
{"id"=>"1"}
答案 0 :(得分:0)
你正在使用CanCan gem,它显然没有给你必要的授权。查看详细信息:
https://github.com/ryanb/cancan/wiki/defining-abilities
另外,作为旁注,我建议更改这些:
match "vote_up", :on => :collection
match "vote_down", :on => :collection
为:
member do
post "vote_up"
post "vote_down"
end
并在视图中进行适当的更改:
<%= button_to 'Vote up', {:action => :vote_up, :id => @post.id} %>
原因是这些操作不应该使用GET请求,因为用户可能会通过刷新页面等多次意外地提交它们。