1

Я получаю сообщение об ошибке:Рубин на Rails не определен метод user_registration_path

NoMethodError in Devise/registrations#new 

undefined method 'user_registration_path'

на этой линии:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 

Это мои маршруты:

devise_for :user, :controllers => { :registrations => "devise/registrations" }, :skip => [:registrations, :sessions] do 
    # devise/registrations 

    get 'signup' => 'devise/registrations#new', :as => :new_user_registration 
    post 'signup' => 'devise/registrations#create', :as => :custom_user_registration 
    end 

Rake Route es:

 new_user_registration GET /signup(.:format)  devise/registrations#new 
    custom_user_registration POST /signup(.:format)  devise/registrations#create 

Почему я получаю ошибку user_registration_path?

+0

вывод рейк-маршрутов? –

+0

@NicolasGarnil Я обновил свой OP, чтобы показать, что у меня есть для моей страницы регистрации – hellomello

ответ

3

Запуск рейк маршрутов, видите ли вы в выходной л так:

user_registration POST /users(.:format)  devise/registrations#create 

Я думаю, что если бы вы написали эту строку

post 'signup' => 'devise/registrations#create', :as => :custom_user_registration 

Теперь у вас есть:

custom_user_registration POST /signup(.:format)  devise/registrations#create 

И следует использовать custom_user_registration_path(resource_name) вместо registration_path(resource_name)

+0

, которая не работает – hellomello

+0

Он также вызывает ошибку undefined method 'custom_user_registration_path'? – zolter

+0

на самом деле, его другая ошибка. Я думаю, потому что у меня есть это: '<% = devise_error_messages! %> ', и я получаю undefined метод 'errors'. Если я удалю это, то это сработает! Но как вы это делаете, чтобы сообщение об ошибках тоже работало? – hellomello

1

Вы пропускаете маршруты регистрации и не переопределяете их всеми настраиваемыми маршрутами, которые вы определили. Удалите :registrations с пропущенных маршрутов. В вашем routes.rb:

Это

devise_for :user, :controllers => { :registrations => "devise/registrations" }, :skip => [:registrations, :sessions] do 

должен быть

devise_for :user, :controllers => { :registrations => "devise/registrations" }, :skip => [:sessions] do 

Или вы можете добавить эти пользовательские маршруты, если вы хотите, чтобы путь всегда быть/регистрация:

devise_for :user, :controllers => { :registrations => "devise/registrations" }, :skip => [:registrations, :sessions] do 
    get 'signup' => 'devise/registrations#new', :as => :new_user_registration 
    post 'signup' => 'devise/registrations#create', as => :user_registration 
    delete 'signup' => 'devise/registrations#destroy', as => :destroy_user_registration 
end 

Я не рекомендую изменять имена помощников (as => :whatever), так как в контроллерах и представлениях используется t рубчик. Хорошо добавлять новые. Я не уверен, что вам нужно указать контроллер, если он по умолчанию.