Rails:在执行操作后重定向

时间:2015-02-04 22:56:58

标签: ruby-on-rails ruby redirect ruby-on-rails-4 url-redirection

我有一个属于用户的个人资料模型,当我想编辑我的个人资料时,我会重定向到http://localhost:3000/1/profile而不是http://localhost:3000/profile为什么?这是我的个人资料resource :profile

的路线

这是我的个人资料控制器

  before_filter :authenticate_user!

  def show
    @user = current_user 
    @profile  = @user.profile
  end

  def update

    @user = current_user
    @profile = @user.profile

    respond_to do |format|
      if @profile.update(profile_params)
        flash[:notice] = "profile à été mis à jour!"
        format.html { redirect_to @profile }
      else
        format.html { render action: 'edit' }
      end
    end
  end

更新

这是个人资料路线

 profile POST                  (/:locale)/profile(.:format)                                profiles#create {:locale=>/en|fr/}
                 new_profile GET                   (/:locale)/profile/new(.:format)                            profiles#new {:locale=>/en|fr/}
                edit_profile GET                   (/:locale)/profile/edit(.:format)                           profiles#edit {:locale=>/en|fr/}
                             GET                   (/:locale)/profile(.:format)                                profiles#show {:locale=>/en|fr/}
                             PATCH                 (/:locale)/profile(.:format)                                profiles#update {:locale=>/en|fr/}
                             PUT                   (/:locale)/profile(.:format)                                profiles#update {:locale=>/en|fr/}
                             DELETE                (/:locale)/profile(.:format)                                profiles#destroy {:locale=>/en|fr/}

2 个答案:

答案 0 :(得分:0)

因为您在更新操作中执行了redirect_to @profile。这是您将遇到的 Rails Magic 之一。惯例是,只要您在redirect_to中使用对象,它就会自动将您重定向到对象show页面。

答案 1 :(得分:0)

您不想重定向到@profile对象,而只需要profile_path(这是您的单一资源路由之一)。 ProfileController中的操作将处理查找current_user的配置文件对象。