Rails - 设计 - edit_user_registration_path

时间:2010-11-07 00:30:22

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

使用Rails有路径edit_user_registration_path,允许用户编辑他们的个人资料。

我正在设置我自己的帐户控制,以便为用户提供更好的用户界面来修改他们的个人资料等。这些路由在/ account / profile,/ account / notices等路由....

问题是这个URL,/ users / edit仍然有效,并将用户带到DEVISE编辑页面。

我怎样才能始终转到新的编辑页面/帐户/个人资料

由于

4 个答案:

答案 0 :(得分:5)

这可能是关于设计最糟糕的部分是制作自定义编辑个人资料路径。原因是当您尝试更新资源时,它会将您发送回默认路径以编辑用户,即如果您收到错误。

我建议您保留默认用户/编辑路径,然后编辑关联,而不是实际资源。否则,您将不得不深入挖掘宝石并重写用户编辑方式。

这就是我所做的。

在您的用户模型user.rb

has_one :profile
has_many :notices

然后你可以有一个noticesprofiles控制器来编辑那些,而不是用户或resource,这是你用设计助手做的,会让你更难定制。为这些表单创建一个hidden_​​field f.hidden_field :user_id, :value => current_user.id,它会在您创建并更新它们时保存用户等...

答案 1 :(得分:4)

从最新的Devise版本(特别是this commit)开始,您现在可以通过path_names为编辑个人资料操作指定自定义路径:

devise_for :users, path_names: { edit: 'profile' }

答案 2 :(得分:0)

更简单的方法是创建一个ProfilesController,并在您的路由中,只需定义“resource:profile”。然后你只需定义“编辑”和“更新”方法就可以了。

我没有比基础知识更进一步,但我真的没有看到它的缺点,与这里提供的任何东西相比,它都非常简单。

答案 3 :(得分:0)

解决方案:

def update
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
    prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)

    if update_resource(resource, account_update_params)
      yield resource if block_given?
      if is_flashing_format?
        flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
          :update_needs_confirmation : :updated
        set_flash_message :notice, flash_key
      end
      sign_in resource_name, resource, :bypass => true
      respond_with resource, :location => after_update_path_for(resource)
    else
      clean_up_passwords resource

#Add a conditional redirect depending on where the controller was called from
      if URI(request.referer).path == '/users/edit'
        respond_with resource
      else
        redirect_to after_update_path_for(resource), :flash => { :alert => "Please enter your password" }
      end


    end
  end