rails 3-在没有视图的控制器中执行操作

时间:2012-01-12 04:11:07

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

我是一个完整的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视图。我非常感谢所有的建议!

2 个答案:

答案 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并坚持使用内置路由。

希望这有帮助。