我有一张名为posts的表。在其中我有一个名为vote的列,它是一个整数。
在我的posts_controller中,我有:
def upvote
@post = Post.find params[:id]
@post.votes = @post.votes +1
end
在我看来,我有
<%= link_to 'like', upvote(post.id)%>
在我的路线中我有
resources :posts do
member do
put :upvote
end
end
每次用户点击时,我都希望它上升+1。我一直收到错误:
未定义的方法`upvote&#39;对于#&lt;#:0x007fc180f8d650&gt;
突出显示这一行
<%= link_to 'like', upvote(post.id)%>
感谢您的帮助!!
答案 0 :(得分:3)
你需要做几件事。
upvote(post.id)
,则应为upvote_post_url(post.id)
。详细了解路线助手here。您的控制器操作upvote
需要修改传入的帖子。 Rails有一些built in counter incrementer来帮助解决这个问题。如果在同一帖子中添加了多个类似条件,它将为您节省任何竞争条件。
def upvote
Post.increment_counter(:votes, params[:id])
end
我建议您遵循Ruby on Rails教程来帮助您入门。 Rails for Zombies很有趣。
答案 1 :(得分:0)
在yez's
回答之后,您还需要更改method
of your link_to
:
<%= link_to 'like', posts_upvote_path(post), method: :put %>
您还希望改善路线(默认情况下,所有路线均为member
路线):
#config/routes.rb
resources :posts do
put :upvote
end
你也更适合使用increment!
方法(这与yez的increment_counter
基本相同,但更简洁):
def upvote
@post = Post.find params[:id]
@post.increment! :votes
end