2012-10-03 13 views
10

Cuando un nuevo usuario envía un nuevo formulario de registro de usuario obtiene el siguiente mensaje de error. Lo sospecho porque el dispositivo/registrations_controller.rb no existe.Devise and Rails - ArgumentError in Devise :: RegistrationsController # create

¿Necesito crear esta estructura de carpetas y controlador o puedo modificar routes.rb para evitar buscar un controlador inexistente?

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 (modelo):

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 
    end 

end 

rastrear - he tenido un vistazo, pero no puede determinar dónde cuestión de mentiras:

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' 

Respuesta

33

Devise::RegistrationsController existe within the Devise gem, por lo que no necesita crearla.

actualización: El error se produce porque está utilizando has_secure_password, que es para soluciones de autenticación de fabricación casera. No lo necesita con Devise (maneja el cifrado de la contraseña). ¡Deshazte de esa línea!

La razón por la que hace que su aplicación explote es que espera que password_digest sea un atributo en su modelo, y validates its presence. Cuando realiza la validación, intenta leer el atributo, pero lo que obtiene en su lugar es el método password_digest de Devise (que espera recibir la contraseña como argumento, por lo que plantea un ArgumentError cuando no obtiene uno).

+0

Se ha agregado la información de seguimiento y el modelo de usuario a la pregunta. ¿Cómo determinaste el problema? – dmuk

+0

La quinta línea del backtrace fue la pista de que se trataba de validaciones: 'lib/active_model/validations/presence.rb: 9: en 'validate''. La 1ra línea muestra el método que se estaba llamando incorrectamente ('password_digest'). –

+0

Perfecto. ¡Salvó mi día! +1 – djserva

Cuestiones relacionadas