Разработайте гем в Rails: создайте user_root_path - PullRequest
9 голосов
/ 21 января 2011

Попытка перенаправить пользователей на связанную с ними "домашнюю" страницу после успешного входа в систему без вывода stored_location_for(resource_or_scope) ... что дает мне бесконечные циклы перенаправления (уверен, что я настроил это неправильно) .

Несмотря на это, я ищу лучший подход ...

Разработка документации Состояние: После вход в систему пользователя, подтверждающий учетная запись или обновление пароля, Devise будет искать ограниченный корень путь для перенаправления. Пример: для :user ресурс, он будет использовать user_root_path если он существует, в противном случае по умолчанию root_path будет используемый. Это означает, что вам нужно установить корень внутри ваших маршрутов: root :to => "home"

Я новичок ... как можно сгенерировать home_root_path для каждого пользователя?

rDocs также упоминают :

- (Объект) after_sign_in_path_for (resource_or_scope)

URL-адрес по умолчанию, который будет использоваться после вход в систему. Используется всеми разработчиками контроллеры и вы можете перезаписать его в вашем ApplicationController для предоставить пользовательский крючок для пользовательского ресурс. По умолчанию он сначала пытается найти resource_root_path, в противном случае он использует корневой путь. Для пользователя область, вы можете определить URL-адрес по умолчанию следующим образом:

 map.user_root '/users', :controller => 'users' # creates user_root_path

 map.namespace :user do |user|
   user.root :controller => 'users' # creates user_root_path
 end

но это просто дает мне undefined local variable or method map 'для #ActionDispatch :: Routing :: Mapper:… `errors.

Ответы [ 5 ]

22 голосов
/ 08 ноября 2011

Если вы хотите перенаправить, используя маршрут в ответ на ваш вопрос ниже:

как можно создать этот home_root_path для каждого пользователя?будет работать, если вы поместите его в файл конфигурации / маршрутов.Он будет перенаправлять пользователя на статьи # index после (например) успешного подтверждения.

    match 'user_root' => 'articles#index', as: :user_root
6 голосов
/ 23 марта 2011

Немного покопался, чтобы понять то же самое. @ polarblau ответ правильный,

def after_sign_in_path_for(resource_or_scope)
  user_info_path(current_user)
end

где user_info_path - это путь к странице, которую вы хотите отобразить.

Кроме того, я бы позволил этому на всякий случай вернуться к супер, хотя я не совсем уверен, если это необходимо ...

def after_sign_in_path_for(resource)
  if resource.is_a(User)
    user_info_path(resource)
  else
    super
  end
end
6 голосов
/ 21 января 2011

Вы можете попробовать что-то вроде этого:

application_controller.rb:

def after_sign_in_path_for(resource_or_scope)
  # return home_page_path for user using current_user method
end
1 голос
/ 24 января 2016

Судя по ответу @SnapShot, это сработало для меня.Я использую несколько моделей устройств, пытаясь перенаправить обратно на страницу редактирования профиля пользователя.

  get 'user_root', to: redirect('/users/edit'), as: :user_root
1 голос
/ 12 ноября 2012

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

def after_sign_in_path_for(resource)
    current_user
end

Если я когда-либо пробовал current_user_path, я всегда получал undefined local variable or method current_user_path ошибок.

Также я использую Rails 3.2.8 и Devise 2.1.2.

Надеюсь, это поможет.

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