我是一个完整的Rails新手,我有一个关于控制器和操作的Rails问题。在我的控制器中,我有一个名为vote的动作。代码如下。
def vote
@item = Item.find(params[:id])
@item.increment(:votes)
@item.save
render :action => show
end
我在“show”视图上有一个按钮,可以激活此操作,如下所示
<%= button_to "Vote", :action => "vote", :id => @item.id, %>
我的问题是,当按下按钮时,我不希望应用程序尝试转到/ items /:id / vote。我只想要执行代码,然后返回到show视图。我非常感谢所有的建议!
答案 0 :(得分:3)
结帐redirect_to
,在此代码的末尾,只需使用网址或路径调用redirect_to即可,用户将被发送到您喜欢的任何位置。
如果此投票功能与您可以执行的控制器位于同一控制器中
def vote
@item = Item.find(params[:id])
@item.increment(:votes)
@item.save
redirect_to :action => 'show'
end
这会将它们发送回你的show controller(我也会查看Rails路径和url函数 - 它们非常有帮助)
答案 1 :(得分:1)
应用程序必须转到items /:id / vote,这是您要发送的请求。将该操作添加到路径文件中。
如果您正在使用物品的宁静路线,您可以这样做:
resources :items do
member do
post 'vote'
end
end
上述代码的来源位于http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default。
但是,我建议你花一点时间思考并熟悉资源的概念。投票是一种资源吗?如果是这样,你可能最好创建一个VotesController并坚持使用内置路由。希望这有帮助。