我尝试通过传递控制器,操作和参数来重定向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
答案 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