我正在实施一个简单的投票系统,点击按钮就会增加+1。例如,如果一个问题有5票,它就会增加。我已经编写了该方法,但我不确定如何通过单击link_to来执行它。我需要重新配置我的路线吗?
questions_controller.rb
def self.ping
@question = Question.find(params[:id])
@question.increment!(:amplify)
render_to do |format|
if @question.save
format.html { redirect_to @question }
end
end
end
的routes.rb
resources :questions
post '/ping' => 'questions#ping', as: 'ping'
答案 0 :(得分:2)
您的路线需要支持id
:
post '/ping/:id' => 'questions#ping', as: 'ping'
或者更好的是,如果你想让它在问题范围内:
resources :questions do
post '/ping' => 'questions#ping', as: ping
end
但是,我认为你不想在questions_controller中使用类方法ping
。我想你只想要一个实例方法:
def ping
@question = Question.find(params[:id])
@question.increment!(:amplify)
if @question.save
render_to do |format|
format.html { redirect_to @question }
end
end
end
如果这不起作用,您在日志中看到了什么错误?
答案 1 :(得分:0)
除了CDub的回答,您可能会受益于member route (2.10):
<强>路线强>
#config/routes.rb
resources :questions do
member do
post :ping
end
end
这应该提供以下路线:
http://yourapp.com/questions/:question_id/ping
查看强>
此网址只能从POST
访问,最好使用link_to
访问:
<%= link_to "+1", question_ping_path(question.id), method: :post %>
<强>控制器强>
您不需要在控制器中声明类方法
#应用程序/控制器/ questions_controller.rb def ping @question = Question.find(params [:question_id]) @ question.increment!(:扩增)
render_to do |format|
format.html { redirect_to @question }
end
端
.increment!保存记录:)