respond_with以及如何设置重定向位置?

时间:2013-06-15 20:06:13

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

我有以下更新用户个人资料。基本网址(http://domain_name.com/users/)完全没问题。

def update
  @user = User.find(params[:id])

  respond_with @user do |format|
    if @user.update_attributes(params[:user])
      if current_user.becomes(User) == @user
        sign_in(@user, :bypass => true)
      end
      flash[:notice] = 'User was successfully updated.'
      format.html { redirect_to @user }         
      format.json { render :status => :ok }
    else
      format.html { render :action => 'edit' }
      format.json { render :status => :bad_request }
    end
  end
end

现在我想把它移到admin命名空间(http://domain_name.com/admin/users/)。我尝试的是改变

redirect_to @user

redirect_to admin_user_path(@user)
然后我得到了:

def update
  @user = User.find(params[:id])

  #respond_with(@user) do |format|
  respond_with(@user, :location => admin_user_path(@user)) do |format|
    if @user.update_attributes(params[:user])
      if current_user.becomes(User) == @user
        sign_in(@user, :bypass => true)
      end
      flash[:notice] = 'User was successfully updated.'
      format.html { redirect_to admin_user_path(@user) }
      format.json { render :status => :ok }
    else          
      format.html { render :action => 'edit', :location => edit_admin_path(user) } 
      format.json { render :status => :bad_request }
    end
  end
end

但它不起作用。我也试着改变

respond_with(@user) do |format|

类似

respond_with(@user, :location => admin_user_path(@user)) do |format|

但它也不起作用。任何人都可以有一些经验,请给我一些建议或解释。

谢谢!

1 个答案:

答案 0 :(得分:0)

我确实相信以下几行:

  respond_with(@user, :location => admin_user_path(@user)) do |format|

对我来说似乎有点奇怪。我原以为这应该是respond_with(@user) do |format|

另请阅读以下内容:Ryan's Scraps - Cleaner RESTful Controllers / respond_with。 Ryan在行动前重写

下声明了以下内容
  

还可以通过传入一个块来响应标准资源处理,以响应为该操作指定要覆盖的格式。

通过此,您将看到要覆盖的格式使用respond_to

在类的顶部声明