2012-10-03 1 views
10

Wenn ein neuer Benutzer ein neues Benutzerregistrierungsformular einreicht, erhalten sie die folgende Fehlermeldung. Ich vermute es, weil das devise/registrations_controller.rb nicht existiert.Devise und Rails - ArgumentError in Devise :: RegistrationsController # create

Muss ich diese Ordnerstruktur und den Controller erstellen oder kann ich routes.rb ändern, um die Suche nach einem nicht vorhandenen Controller zu vermeiden?

Fehler:

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

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 

Trace zurück - ich habe einen Blick hatte, aber nicht bestimmen kann, wo Problem liegt:

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' 

Antwort

33

Die Devise::RegistrationsController existiert within the Devise gem, so dass Sie es nicht erstellen müssen.

aktualisieren: Der Fehler tritt auf, weil Sie has_secure_password verwenden, die für hausgemachte Authentifizierungslösungen. Sie brauchen es nicht mit Devise (es behandelt die Verschlüsselung des Passworts selbst). Werde diese Linie los!

Der Grund, warum Ihre App explodiert, ist, dass sie password_digest als Attribut in Ihrem Modell erwartet und validates its presence. Wenn es die Validierung durchführt, versucht es das Attribut zu lesen, aber was es stattdessen erhält, ist Devices password_digest-Methode (die erwartet, das Kennwort als ein Argument zu erhalten, so löst ein ArgumentError aus, wenn es einen nicht erhält).

+0

Trace-Info und Benutzermodell zu Frage hinzugefügt. Wie haben Sie das Problem festgestellt? – dmuk

+0

Die fünfte Zeile des Backtrace war der Hinweis, dass es sich um Validierungen handelte: 'lib/active_model/validations/presence.rb: 9: in 'validate'. Die erste Zeile zeigt die Methode, die falsch aufgerufen wurde ('password_digest'). –

+0

Perfekt. Habe meinen Tag gerettet! +1 – djserva