Rails - разработка - edit_user_registration_path - PullRequest
6 голосов
/ 07 ноября 2010

в Rails есть путь edit_user_registration_path, позволяющий пользователям редактировать свой профиль.

Я настраиваю свой собственный контроль учетных записей, чтобы предоставить пользователю лучший пользовательский интерфейс для редактирования своего профиля и т. Д.маршрутизируется по адресу / account / profile, / account / Notices и т. д. *

Проблема в том, что этот URL-адрес / users / edit по-прежнему работает и переводит пользователей на страницу редактирования DEVISE.Как я могу это всегда перейти на новую страницу редактирования / аккаунт / профиль

Спасибо

Ответы [ 4 ]

5 голосов
/ 07 ноября 2010

Это, пожалуй, худшая часть разработки - создание собственного пути редактирования профиля. Причина этого в том, что когда вы пытаетесь обновить свой ресурс, он отправит вас обратно к пути по умолчанию для редактирования пользователя, то есть, если вы получите ошибки.

Я хотел бы предложить, чтобы вы сохранили путь по умолчанию для пользователей / редактирования, а затем отредактировали ассоциации, а не фактические ресурсы. В противном случае вам придется копаться в жемчужине и переписывать пути редактирования пользователей.

Это то, что я сделал.

В вашей пользовательской модели user.rb

has_one :profile
has_many :notices

Тогда вы можете иметь контроллер notices и profiles, где вы будете редактировать их, а не пользователя или resource, который вы сделали с помощью помощников устройства, и его будет сложнее настроить. Создайте скрытое поле f.hidden_field :user_id, :value => current_user.id для этих форм, и оно сохранит пользователя при его создании, обновлении и т. Д ...

4 голосов
/ 04 марта 2014

Начиная с последней версии Devise (в частности, this commit ), теперь вы можете указать собственный путь для действия по редактированию профиля через path_names:

devise_for :users, path_names: { edit: 'profile' }
0 голосов
/ 20 февраля 2014

Решение:

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
0 голосов
/ 06 ноября 2012

Более простой способ - просто создать ProfilesController, а в ваших маршрутах просто определить "resource: profile".Затем вы просто определяете методы «edit» и «update», и все готово.

Я не пошел дальше, чем основы, но я действительно не вижу недостатков, и это действительнопросто по сравнению с чем-либо, что было предложено здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...