使用Rails有路径edit_user_registration_path,允许用户编辑他们的个人资料。
我正在设置我自己的帐户控制,以便为用户提供更好的用户界面来修改他们的个人资料等。这些路由在/ account / profile,/ account / notices等路由....
问题是这个URL,/ users / edit仍然有效,并将用户带到DEVISE编辑页面。
我怎样才能始终转到新的编辑页面/帐户/个人资料
由于
答案 0 :(得分:5)
这可能是关于设计最糟糕的部分是制作自定义编辑个人资料路径。原因是当您尝试更新资源时,它会将您发送回默认路径以编辑用户,即如果您收到错误。
我建议您保留默认用户/编辑路径,然后编辑关联,而不是实际资源。否则,您将不得不深入挖掘宝石并重写用户编辑方式。
这就是我所做的。
在您的用户模型user.rb
has_one :profile
has_many :notices
然后你可以有一个notices
和profiles
控制器来编辑那些,而不是用户或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