Подтвердить что ты не робот

Комбинирование проекта с ресурсами: пользователи в Rails

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 3

В ссылке, написанной David Sulc, показано, что вы должны написать префикс device_for или ресурсы Пример:

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

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

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

Оба работают хорошо для меня