Объединение Devise с ресурсами: пользователи в Rails - PullRequest
16 голосов
/ 19 февраля 2011

Я пытаюсь объединить Devise с пользовательским ресурсом RESTful, используя следующий код в файле rout.rb:

resources :users, :only => [:index, :show]
devise_for :users

Однако URL localhost: 3000 / users / sign_up не идет в устройствостраница регистрации, скорее она выдает ошибку «Не удалось найти пользователя с ID = sign_up», поэтому она считает, что URL-адрес указывает на действие show контроллера пользователя.Я обнаружил, что смена порядка строк приводит к предполагаемому поведению:

devise_for :users
resources :users, :only => [:index, :show]

Теперь, когда вы переходите на localhost: 3000 / users / sign_up, вы действительно получаете страницу регистрации и переходите на localhost: 3000 / users / 1 запускает действие show контроллера пользователя, как и предполагалось.

Мой вопрос таков: корректно ли изменяет порядок кода, подобный этому, чтобы заставить устройство работать вместе с ресурсом users?Или что-то глубже идет не так?Я подозреваю, что просто поменять местами эти две строки кода не может быть решением!

Ответы [ 3 ]

22 голосов
/ 19 февраля 2011

Мой совет в этих ситуациях - проверять с помощью rake routes В маршрутах порядок, в котором определены маршруты, имеет значение, поскольку более ранние маршруты имеют приоритет.

Так что в вашем случае resources :users, :only => [:index, :show] создал restfull /users/:id(.:format)маршрут, который указывал на {:action=>"show", :controller=>"users"}, и когда вы заходили на URL-адрес регистрации Devise /users/sign-up, он считал «зарегистрироваться» :id пользователя и, естественно, не мог его найти.

Теперь, если вы выполнитеСначала разработайте настройку маршрутизации, маршруты разработки будут иметь приоритет над указанным позже, и вы получите ожидаемое поведение.

16 голосов
/ 19 февраля 2011

Да, это правильный способ сделать это (см. https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface)

3 голосов
/ 25 февраля 2015

В ссылке, которую написал Дэвид Сульк, показано, что вы должны написать префикс для device_for или ресурсов Пример:

devise_for :users, :path_prefix => 'my'
resources :users

Или ваши пользователи

devise_for :users
scope "/admin" do
  resources :users
end

У меня оба хорошо работают

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