编辑:感谢@vinodadhikary - 经过进一步调查,似乎错误发生在 a)电子邮件不是唯一的,b)名称不是唯一的或 c)电子邮件显然是假的(h@h.com)。如果 Devise 不接受注册,我希望错误能够优雅地发生。如果密码不匹配或字段不完整,则错误处理是正确的。此外,非唯一名称应该不是问题吗?这是由使用 FriendlyID 创建 slug(使用名称作为 slug)引起的吗?
原文:当有人在满足上述注册条件之一时注册时,我在我的 Devise 注册中遇到了一个奇怪的错误。我认为我没有为 Devise 安装做任何超出正常范围的事情(使用 Rails Composer,如果重要的话)。在此先感谢您的帮助...
这是错误:
SQLite3::ConstraintException: constraint failed: INSERT INTO "users"
("avatar_content_type", "avatar_file_name", "avatar_file_size", "avatar_updated_at",
"confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at",
"current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password",
"fully_registered", "last_sign_in_at", "last_sign_in_ip", "name", "remember_created_at",
"reset_password_sent_at", "reset_password_token", "sign_in_count", "slug",
"unconfirmed_email", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?)
设计/注册/new.html.haml:
%section.row-fluid.sign-up
.container-fluid
.span6.landing-left
%h1 Sign Up!
.form-inputs
= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-vertical' }) do |f|
= f.error_notification
= display_base_errors resource
= f.input :name, :autofocus => true, :placeholder => "Your Name", label: false
= f.input :email, :required => true, :placeholder => "Your Email", label: false
= f.input :password, :required => true, :placeholder => "Password", label: false
= f.input :password_confirmation, :required => true, :placeholder => "Password Confirmation", label: false
= f.button :submit, 'Join L', :class => 'btn button'
%p
= link_to "or, Sign In", new_user_session_url
用户.rb:
class User < ActiveRecord::Base
rolify
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
after_create :assign_default_role
# Setup accessible (or protected) attributes for your model
attr_accessible :role_ids, :as => :admin
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :fully_registered, :avatar
has_one :profile, dependent: :destroy
has_many :appointments, foreign_key: "host_id"
has_many :appointments, foreign_key: "attendee_id"
has_many :reviews, foreign_key: "reviewee_id"
has_many :reviewed_users, foreign_key: "reviewer_id", class_name: "Review"
validates_attachment :avatar,
content_type: { content_type: ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'] },
size: { less_than: 1.megabytes }
extend FriendlyId
friendly_id :name, use: [:slugged, :history]
has_attached_file :avatar, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>'
}, default_url: 'https://s3.amazonaws.com/l/layout/elements/placeholders/image_placeholder.svg'
def get_review_score
reviews.average('rating').to_f
end
protected
# def confirmation_required?
# false
# end
def assign_default_role
# Default Role: User, ID: 2
add_role(:user)
end
end
全栈跟踪:
Started POST "/users" for 127.0.0.1 at 2013-07-17 19:20:23 -0400
Processing by Devise::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Vl2A8qW8GLCF7elJIQkw4FCBcRd7Oaz1O9yJth3Wg6g=", "user"=>{"name"=>"Henry", "email"=>"h.h@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Join L"}
(0.1ms) begin transaction
FriendlyId::Slug Load (0.3ms) SELECT "friendly_id_slugs".* FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."sluggable_type" = 'User' AND (slug = 'henry' OR slug LIKE 'henry--%') ORDER BY LENGTH(slug) DESC, slug DESC LIMIT 1
User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = 'h.h@gmail.com' LIMIT 1
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'W6sjj2MZ1wxqxEfrFxYM' LIMIT 1
Binary data inserted for `string` type on column `encrypted_password`
SQL (1.0ms) INSERT INTO "users" ("avatar_content_type", "avatar_file_name", "avatar_file_size", "avatar_updated_at", "confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "fully_registered", "last_sign_in_at", "last_sign_in_ip", "name", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "slug", "unconfirmed_email", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["avatar_content_type", nil], ["avatar_file_name", nil], ["avatar_file_size", nil], ["avatar_updated_at", nil], ["confirmation_sent_at", Wed, 17 Jul 2013 19:20:23 EDT -04:00], ["confirmation_token", "W6sjj2MZ1wxqxEfrFxYM"], ["confirmed_at", nil], ["created_at", Wed, 17 Jul 2013 19:20:23 EDT -04:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "h.h@gmail.com"], ["encrypted_password", "$2a$10$4XffwFcxoq4a8bDvUTvTauZNkUkKB/KgY.FZU4pxOH.pLmkL/JGvi"], ["fully_registered", false], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["name", "Henry"], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["sign_in_count", 0], ["slug", "henry--2"], ["unconfirmed_email", nil], ["updated_at", Wed, 17 Jul 2013 19:20:23 EDT -04:00]]
SQLite3::ConstraintException: constraint failed: INSERT INTO "users" ("avatar_content_type", "avatar_file_name", "avatar_file_size", "avatar_updated_at", "confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "fully_registered", "last_sign_in_at", "last_sign_in_ip", "name", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "slug", "unconfirmed_email", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
(0.1ms) rollback transaction
Completed 500 Internal Server Error in 81ms
ActiveRecord::StatementInvalid - SQLite3::ConstraintException: constraint failed: INSERT INTO "users" ("avatar_content_type", "avatar_file_name", "avatar_file_size", "avatar_updated_at", "confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "fully_registered", "last_sign_in_at", "last_sign_in_ip", "name", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "slug", "unconfirmed_email", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?):
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_adapter.rb:285:in `rescue in log'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
activerecord (3.2.13) lib/active_record/connection_adapters/sqlite_adapter.rb:242:in `exec_query'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/database_statements.rb:63:in `exec_insert'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/database_statements.rb:90:in `insert'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
activerecord (3.2.13) lib/active_record/relation.rb:66:in `insert'
activerecord (3.2.13) lib/active_record/persistence.rb:367:in `create'
activerecord (3.2.13) lib/active_record/timestamp.rb:58:in `create'
activerecord (3.2.13) lib/active_record/callbacks.rb:268:in `block in create'
activesupport (3.2.13) lib/active_support/callbacks.rb:414:in `_run__2609459987145809617__create__3448311305093244115__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.13) lib/active_record/callbacks.rb:268:in `create'
activerecord (3.2.13) lib/active_record/persistence.rb:348:in `create_or_update'
activerecord (3.2.13) lib/active_record/callbacks.rb:264:in `block in create_or_update'
activesupport (3.2.13) lib/active_support/callbacks.rb:425:in `_run__2609459987145809617__save__3448311305093244115__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.13) lib/active_record/callbacks.rb:264:in `create_or_update'
activerecord (3.2.13) lib/active_record/persistence.rb:84:in `save'
activerecord (3.2.13) lib/active_record/validations.rb:50:in `save'
activerecord (3.2.13) lib/active_record/attribute_methods/dirty.rb:22:in `save'
activerecord (3.2.13) lib/active_record/transactions.rb:259:in `block (2 levels) in save'
activerecord (3.2.13) lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
activerecord (3.2.13) lib/active_record/transactions.rb:208:in `transaction'
activerecord (3.2.13) lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
activerecord (3.2.13) lib/active_record/transactions.rb:259:in `block in save'
activerecord (3.2.13) lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
activerecord (3.2.13) lib/active_record/transactions.rb:258:in `save'
devise (2.2.4) app/controllers/devise/registrations_controller.rb:15:in `create'
actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.2.13) lib/active_support/callbacks.rb:436:in `_run__1922468707363096533__process_action__814005644436315713__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
activerecord (3.2.13) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.2.13) lib/abstract_controller/rendering.rb:45:in `process'
actionpack (3.2.13) lib/action_controller/metal.rb:203:in `dispatch'
actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.2.13) lib/action_controller/metal.rb:246:in `block in action'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:36:in `call'
actionpack (3.2.13) lib/action_dispatch/routing/mapper.rb:42: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 `call'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612: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 `call'
actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.5) lib/rack/etag.rb:23:in `call'
rack (1.4.5) lib/rack/conditionalget.rb:35:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.13) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `_run__2361827533017433596__call__3448311305093244115__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
better_errors (0.9.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (0.9.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (0.9.0) lib/better_errors/middleware.rb:56:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call'
railties (3.2.13) lib/rails/engine.rb:479:in `call'
railties (3.2.13) lib/rails/application.rb:223:in `call'
rack (1.4.5) lib/rack/content_length.rb:14:in `call'
railties (3.2.13) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
/usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
Started POST "/__better_errors/70311741936300/variables" for 127.0.0.1 at 2013-07-17 19:20:23 -0400