2012-10-03 37 views
10

當一個新的用戶提交他們得到下面的錯誤消息的新用戶註冊表單。我懷疑它是因爲devise/registrations_controller.rb不存在。設計和Rails - 引發ArgumentError在設計:: RegistrationsController#創建

我需要創建這個文件夾結構和控制器或我可以修改routes.rb中,以避免尋找一個不存在的控制器?

錯誤:

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(模型):

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 

溯源 - 我有看,但不能確定在哪裏問題在於:

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' 

回答

33

Devise::RegistrationsController存在within the Devise gem,所以你不需要創建它。

更新:由於您使用has_secure_password,這是自制的身份驗證解決方案 出現的錯誤。 Devise不需要它(它處理密碼本身的加密)。擺脫那條線!

它導致您的應用程序崩潰的原因是它期望password_digest是您的模型和validates its presence屬性。當它驗證,它會嘗試讀取屬性,但它得到的卻是設計的password_digest方法(期望接收的密碼作爲參數,所以引發ArgumentError時,它沒有得到一個)。

+0

添加跟蹤信息和用戶模型以提問。你是如何確定問題的? – dmuk

+0

回溯的第五行是線索,這是驗證:'LIB/active_model /驗證/ presence.rb:9:在「validate''。第一行顯示被錯誤調用的方法('password_digest')。 –

+0

完美。拯救了我的一天! +1 – djserva