Rails:redirect_to:controller =>'tips',:action => 'show',:id => @ tip.permalink

时间:2010-06-11 21:35:58

标签: ruby-on-rails action

我尝试通过传递控制器,操作和参数来重定向rails以显示操作。但是,rails完全忽略了动作的名称!

我得到的是 http://mysite/controllername/paramId

所以我有错误信息......

这是我使用的动作代码:

def update
    @tip = current_user.tips.find(params[:id])
    @tip.attributes = params[:tip]
    @tip.category_ids = params[:categories]
    @tip.tag_with(params[:tags]) if params[:tags]


    if @tip.save
      flash[:notice] = 'Tip was successfully updated.'
      redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink
    else
      render :action => 'edit'
    end
  end 

3 个答案:

答案 0 :(得分:35)

为什么要打架?

redirect_to @tip

您可以使用:notice选项缩短代码。

redirect_to @tip, :notice => 'Message here'

答案 1 :(得分:7)

如果是REST资源路由,则路由实际上是正确的。 GET上的/tips/id请求实际上会调用show操作。由于它的路由方式,我的猜测是你用map.resources路由它,这是正确的。

答案 2 :(得分:-3)

这可能是暂时的“绕行”。使用渲染,它非常有效....

if @tip.save
  flash[:notice] = 'Tip was successfully updated.'
   render :action => 'show', :id => @tip.permalink
 # redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink
else
  render :action => 'edit'
end