Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoMethodError in Devise::Registrations#new

I keep getting this error when I try to sign up on my application, I am using devise for authentication;

    NoMethodError in Devise::Registrations#new


undefined method `registration_path' for #<#<Class:0x007fe45c6c35e8>:0x007fe45d9ffd78>
Extracted source (around line #3):

  <h2>Sign up</h2>

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

    <div><%= f.label :email %><br />

When I run rake routes I get;

                  Prefix Verb   URI Pattern                    Controller#Action
        new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
            user_session POST   /users/sign_in(.:format)       devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
           user_password POST   /users/password(.:format)      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                         PATCH  /users/password(.:format)      devise/passwords#update
                         PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
       user_registration POST   /users(.:format)               devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
                         PATCH  /users(.:format)               devise/registrations#update
                         PUT    /users(.:format)               devise/registrations#update
                         DELETE /users(.:format)               devise/registrations#destroy

Sign up link code;

<%= link_to "Sign up", new_user_registration_path%>

UPDATE Thanks to ParaPenguin the sign up field works now, but when I click submit I keep getting this problem

No route matches [POST] "/users/sign_up"

    new_user_session_path    GET     /users/sign_in(.:format)    devise/sessions#new
user_session_path    POST    /users/sign_in(.:format)    devise/sessions#create
destroy_user_session_path    DELETE  /users/sign_out(.:format)   devise/sessions#destroy
user_password_path   POST    /users/password(.:format)   devise/passwords#create
new_user_password_path   GET     /users/password/new(.:format)   devise/passwords#new
edit_user_password_path  GET     /users/password/edit(.:format)  devise/passwords#edit
PATCH    /users/password(.:format)   devise/passwords#update
PUT  /users/password(.:format)   devise/passwords#update
cancel_user_registration_path    GET     /users/cancel(.:format)     devise/registrations#cancel
user_registration_path   POST    /users(.:format)    devise/registrations#create
new_user_registration_path   GET     /users/sign_up(.:format)    devise/registrations#new
edit_user_registration_path  GET     /users/edit(.:format)   devise/registrations#edit
PATCH    /users(.:format)    devise/registrations#update
PUT  /users(.:format)    devise/registrations#update
DELETE   /users(.:format)   

Update 2-Gjaldon asked me to include my user model and routes My user model

    class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

Routes.rb

Document::Application.routes.draw do
  devise_for :users
   root "pages#home"
  get "about" => "pages#about"
   get "prices" => "pages#prices"
  get "faq" => "pages#faq", :as => :faq
  get "terms" => "pages#terms"
  get "view" => "pages#view"
  get "policy" => "pages#policy"
  get "contact" => "pages#contact"
  get "works" => "pages#works"
like image 360
neils Avatar asked Feb 15 '23 06:02

neils


1 Answers

Could you provide your routes for Devise in your routes.rb and the devise code for your User model?

It's either one of the following that might fix your problem:

  1. Restart your Rails server. This way, Rails will see the new files and changes Devise has made to Rails.

  2. Did you override the Devise::Registrations#new action? If so, you will need to replace your view code below:

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

with:

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

In your devise_registrations/edit.html.erb view, your form_for code would look like:

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

Your rake routes actually provides you with the routes you need to submit to. Just keep in mind that the corresponding controller and action is displayed under the Controller#action column in the output of rake routes. The form in edit action should always submit to the update action and the form in new action should always submit to the create action if you stick to the Rails conventions. If you decide to have a form in another action for creating a record, then make sure to have the form submit to the create action.

like image 107
Gjaldon Avatar answered Feb 17 '23 21:02

Gjaldon