2012-10-03 5 views
10

Khi người dùng mới gửi biểu mẫu đăng ký người dùng mới, họ nhận được thông báo lỗi dưới đây. Tôi nghi ngờ nó vì devise/registrations_controller.rb không tồn tại.Devise and Rails - ArgumentError trong Devise :: RegistrationsController # create

Tôi có cần phải tạo cấu trúc thư mục và bộ điều khiển này hay tôi có thể sửa đổi tuyến đường.rb để tránh tìm kiếm bộ điều khiển không tồn tại?

Lỗi:

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 (mô hình):

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 

vết trở lại - Tôi đã có một cái nhìn, nhưng không thể xác định nơi vấn đề nằm:

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' 

Trả lời

33

Devise::RegistrationsController tồn tại within the Devise gem, vì vậy bạn không cần phải tạo.

Cập nhật: Lỗi xảy ra vì bạn đang sử dụng has_secure_password, là giải pháp xác thực tự chế. Bạn không cần nó với Devise (nó xử lý việc mã hóa mật khẩu của chính nó). Loại bỏ dòng đó!

Lý do khiến ứng dụng của bạn phát nổ là mong đợi password_digest là thuộc tính trên mô hình của bạn và validates its presence. Khi nó xác nhận, nó cố gắng đọc thuộc tính, nhưng thay vào đó nó là phương thức password_digest của Devise (dự kiến ​​nhận mật khẩu như một đối số, vì vậy hãy tăng ArgumentError khi nó không nhận được).

+0

Đã thêm thông tin theo dõi và mô hình người dùng vào câu hỏi. Bạn đã xác định vấn đề như thế nào? – dmuk

+0

Dòng thứ 5 của backtrace là đầu mối mà nó đã được xác nhận: 'lib/active_model/validations/presence.rb: 9: in 'validate''. Dòng đầu tiên cho thấy phương thức được gọi sai ('password_digest'). –

+0

Hoàn hảo. Lưu ngày của tôi! +1 – djserva