Ruby-on-rails – Devise and Rails – ArgumentError in Devise::RegistrationsController#create

devise, ruby, ruby-on-rails, ruby-on-rails-3

When a new user submits a new user registration form they get the below error message. I suspect it because the devise/registrations_controller.rb doesn't exist.

Do I need to create this folder structure and controller or can I modify the routes.rb to avoid searching for a non-existent controller?

Error:

 ArgumentError in Devise::RegistrationsController#create wrong number of arguments (0 for 1) Rails.root: C:/Users/COMPAQ/Documents/NetBeansProjects/RailsBlog Parameters: {"utf8"=>"✓",  "authenticity_token"=>"xxxxxxxxxxxxxxxxxxxxxx/c=",  "user"=>{"email"=>"[email protected]",  "password"=>"[FILTERED]",  "password_confirmation"=>"[FILTERED]"},  "commit"=>"Sign up"}

routes.rb:

RailsBlog::Application.routes.draw do  devise_for :users

User.rb (model):

class User < ActiveRecord::Base  # Include default devise modules. Others available are:  # :token_authenticatable, :confirmable,  # :lockable, :timeoutable and :omniauthable  devise :database_authenticatable, :registerable,         :recoverable, :rememberable, :trackable, :validatable  # Setup accessible (or protected) attributes for your model  attr_accessible :email, :password, :password_confirmation, :remember_me  attr_accessible :name, :email, :password, :password_confirmation  has_secure_password  #has_many :microposts, dependent: :destroy  #has_many :relationships, foreign_key: "follower_id", dependent: :destroy  #has_many :followed_users, through: :relationships, source: :followed  #has_many :reverse_relationships, foreign_key: "followed_id",           #class_name:  "Relationship",           #dependent:   :destroy  #has_many :followers, through: :reverse_relationships, source: :follower  before_save { |user| user.email = email.downcase }  before_save :create_remember_token  validates :name, presence: true, length: { maximum: 50 }  VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i  validates :email, presence:   true,            format:     { with: VALID_EMAIL_REGEX },            uniqueness: { case_sensitive: false }  validates :password, presence: true, length: { minimum: 6 }  validates :password_confirmation, presence: true  def feed    Micropost.from_users_followed_by(self)  end  def following?(other_user)    relationships.find_by_followed_id(other_user.id)  end  def follow!(other_user)    relationships.create!(followed_id: other_user.id)  end  def unfollow!(other_user)    relationships.find_by_followed_id(other_user.id).destroy  end  private  def create_remember_token    self.remember_token = SecureRandom.urlsafe_base64  endend

Trace back – I have had a look but cannot determine where issue lies:

devise (2.1.2) lib/devise/models/database_authenticatable.rb:109:in `password_digest'activemodel (3.2.1) lib/active_model/errors.rb:254:in `block in add_on_blank'activemodel (3.2.1) lib/active_model/errors.rb:253:in `each'activemodel (3.2.1) lib/active_model/errors.rb:253:in `add_on_blank'activemodel (3.2.1) lib/active_model/validations/presence.rb:9:in `validate'activesupport (3.2.1) lib/active_support/callbacks.rb:310:in `_callback_before_185'activesupport (3.2.1) lib/active_support/callbacks.rb:484:in `_run__875543711__validate__219075599__callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback'activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_validate_callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'activemodel (3.2.1) lib/active_model/validations.rb:212:in `run_validations!'activemodel (3.2.1) lib/active_model/validations/callbacks.rb:53:in `block in run_validations!'activesupport (3.2.1) lib/active_support/callbacks.rb:425:in `_run__875543711__validation__219075599__callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback'activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_validation_callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'activemodel (3.2.1) lib/active_model/validations/callbacks.rb:53:in `run_validations!'activemodel (3.2.1) lib/active_model/validations.rb:179:in `valid?'activerecord (3.2.1) lib/active_record/validations.rb:69:in `valid?'activerecord (3.2.1) lib/active_record/validations.rb:77:in `perform_validations'activerecord (3.2.1) lib/active_record/validations.rb:50:in `save'activerecord (3.2.1) lib/active_record/attribute_methods/dirty.rb:22:in `save'activerecord (3.2.1) lib/active_record/transactions.rb:241:in `block (2 levels) in save'activerecord (3.2.1) lib/active_record/transactions.rb:295:in `block in with_transaction_returning_status'activerecord (3.2.1) lib/active_record/connection_adapters/abstract/database_statements.rb:190:in `transaction'activerecord (3.2.1) lib/active_record/transactions.rb:208:in `transaction'activerecord (3.2.1) lib/active_record/transactions.rb:293:in `with_transaction_returning_status'activerecord (3.2.1) lib/active_record/transactions.rb:241:in `block in save'activerecord (3.2.1) lib/active_record/transactions.rb:252:in `rollback_active_record_state!'activerecord (3.2.1) lib/active_record/transactions.rb:240:in `save'devise (2.1.2) app/controllers/devise/registrations_controller.rb:15:in `create'actionpack (3.2.1) lib/action_controller/metal/implicit_render.rb:4:in `send_action'actionpack (3.2.1) lib/abstract_controller/base.rb:167:in `process_action'actionpack (3.2.1) lib/action_controller/metal/rendering.rb:10:in `process_action'actionpack (3.2.1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'activesupport (3.2.1) lib/active_support/callbacks.rb:436:in `_run__853675117__process_action__862668662__callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback'activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'actionpack (3.2.1) lib/abstract_controller/callbacks.rb:17:in `process_action'actionpack (3.2.1) lib/action_controller/metal/rescue.rb:29:in `process_action'actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'activesupport (3.2.1) lib/active_support/notifications.rb:123:in `block in instrument'activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'activesupport (3.2.1) lib/active_support/notifications.rb:123:in `instrument'actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:29:in `process_action'actionpack (3.2.1) lib/action_controller/metal/params_wrapper.rb:205:in `process_action'activerecord (3.2.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'actionpack (3.2.1) lib/abstract_controller/base.rb:121:in `process'actionpack (3.2.1) lib/abstract_controller/rendering.rb:45:in `process'actionpack (3.2.1) lib/action_controller/metal.rb:203:in `dispatch'actionpack (3.2.1) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'actionpack (3.2.1) lib/action_controller/metal.rb:246:in `block in action'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in `call'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in `dispatch'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:30:in `call'actionpack (3.2.1) lib/action_dispatch/routing/mapper.rb:40:in `call'journey (1.0.4) lib/journey/router.rb:68:in `block in call'journey (1.0.4) lib/journey/router.rb:56:in `each'journey (1.0.4) lib/journey/router.rb:56:in `call'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:589:in `call'warden (1.2.1) lib/warden/manager.rb:35:in `block in call'warden (1.2.1) lib/warden/manager.rb:34:in `catch'warden (1.2.1) lib/warden/manager.rb:34:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'rack (1.4.1) lib/rack/etag.rb:23:in `call'rack (1.4.1) lib/rack/conditionalget.rb:35:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/head.rb:14:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/flash.rb:242:in `call'rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/cookies.rb:338:in `call'activerecord (3.2.1) lib/active_record/query_cache.rb:64:in `call'activerecord (3.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:443:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `_run__805649291__call__219075599__callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback'activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:65:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'railties (3.2.1) lib/rails/rack/logger.rb:26:in `call_app'railties (3.2.1) lib/rails/rack/logger.rb:16:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/request_id.rb:22:in `call'rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'rack (1.4.1) lib/rack/runtime.rb:17:in `call'activesupport (3.2.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'rack (1.4.1) lib/rack/lock.rb:15:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/static.rb:53:in `call'railties (3.2.1) lib/rails/engine.rb:479:in `call'railties (3.2.1) lib/rails/application.rb:220:in `call'rack (1.4.1) lib/rack/content_length.rb:14:in `call'railties (3.2.1) lib/rails/rack/log_tailer.rb:14:in `call'rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'C:/RUBY/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'C:/RUBY/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'C:/RUBY/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in  start_thread'

Best Solution

The Devise::RegistrationsController exists within the Devise gem, so you don't need to create it.

Update:The error occurs because you are using has_secure_password, which is for homemade authentication solutions. You don't need it with Devise (it handles the encryption of the password itself). Get rid of that line!

The reason it causes your app to blow up is that it expects password_digest to be an attribute on your model, and validates its presence. When it does the validation, it tries to read the attribute, but what it gets instead is Devise's password_digest method (which expects to receive the password as an argument, so raises an ArgumentError when it doesn't get one).