0

Я пытаюсь настроить двухэтапный процесс регистрации с помощью Devise in Rails и после этого tutorial by Claudio Marai. Когда я ввожу адрес электронной почты в форме (первый шаг), я получаю сообщение об ошибке говорит мне, там была ошибка маршрутизации, и что он не мог найти RegistrationsControllerRails двухступенчатая регистрация с приложением - ошибки

Started POST "/users" for 127.0.0.1 at 2012-05-03 22:50:59 -0400 

ActionController::RoutingError (uninitialized constant RegistrationsController): 
    activesupport (3.2.1) lib/active_support/inflector/methods.rb:229:in `block in constantize' 
    activesupport (3.2.1) lib/active_support/inflector/methods.rb:228:in `each' 
    activesupport (3.2.1) lib/active_support/inflector/methods.rb:228:in `constantize' 
    . 
    . 
    . 

Я полагал, что это было связано с наличие :registrations => "registrations" в моем routes.rb file, как описано на первом этапе the tutorial. Затем я попробовал две альтернативы, которые привели к одной и той же ошибке. Во-первых, я удалил :registrations => "registrations" с routes.rb file. Когда это не сработало, я снова вставил строку и добавил registrations_controller.rb в каталог controllers который выглядел так:

class RegistrationsController < Devise::RegistrationsController 
end 

Я вычислял два варианта будет иметь тот же эффект - но - я попробовал их все равно ,

ошибка я получил следующее:

Started POST "/users" for 127.0.0.1 at 2012-05-03 22:47:29 -0400 
Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"?", "authenticity_token"=>"ttPBRPRLVzPBHcDDKRJbimv0Yp/egdK5qBkIvBTL4Ig=", "user"=>{"email"=>"[email protected]"}, "x"=>"0", "y"=>"0"} 
    (0.6ms) begin transaction 
    User Exists (1.5ms) SELECT 1 FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    CACHE (0.0ms) SELECT 1 FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = '8tA1jakpAXNK4Piz7J6R' LIMIT 1 
    SQL (14.0ms) INSERT INTO "users" ("confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "fb_id", "fb_token", "first_name", "last_name", "last_sign_in_at", "last_sign_in_ip", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "state", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["confirmation_sent_at", Thu, 03 May 2012 22:47:30 EDT -04:00], ["confirmation_token", "8tA1jakpAXNK4Piz7J6R"], ["confirmed_at", nil], ["created_at", Thu, 03 May 2012 22:47:30 EDT -04:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "[email protected]"], ["encrypted_password", nil], ["fb_id", nil], ["fb_token", nil], ["first_name", nil], ["last_name", nil], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["sign_in_count", 0], ["state", nil], ["updated_at", Thu, 03 May 2012 22:47:30 EDT -04:00]] 
SQLite3::ConstraintException: constraint failed: INSERT INTO "users" ("confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "fb_id", "fb_token", "first_name", "last_name", "last_sign_in_at", "last_sign_in_ip", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "state", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
    (0.3ms) rollback transaction 
Completed 500 Internal Server Error in 441ms 

ActiveRecord::StatementInvalid (SQLite3::ConstraintException: constraint failed: INSERT INTO "users" ("confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "fb_id", "fb_token", "first_name", "last_name", "last_sign_in_at", "last_sign_in_ip", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "state", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)): 
    sqlite3 (1.3.5) lib/sqlite3/statement.rb:108:in `step' 
    sqlite3 (1.3.5) lib/sqlite3/statement.rb:108:in `block in each' 
    sqlite3 (1.3.5) lib/sqlite3/statement.rb:107:in `loop' 
    sqlite3 (1.3.5) lib/sqlite3/statement.rb:107:in `each' 
    . 
    . 
    . 

выше ошибка имеет меня действительно путают!

В том же виде, когда я добавляю поля password и password_confirmation, все происходит гладко - создается учетная запись пользователя и отправляется подтверждение по электронной почте пользователю с помощью ссылки подтверждения.

Я был бы признателен за любую помощь в этом отношении - спасибо! Я использую Ruby 1.9.3-p125 и Rails 3.2.1

+0

Этот учебник кажется каким-то тщательным, вы уверены, что ничего не пропустили? А именно, переопределение метода 'password_required? 'Внутри модуля Devise? – Ashitaka

+0

@Ashitaka Как вы можете себе представить, я уже 20 лет уже прошел этот урок! : P У меня есть метод 'password_required?' В одном из файлов 'initializer', как объясняется в учебнике. –

ответ

3

Проблема не из-за проверки Rails, это связано с нарушением ограничения базы данных.

Более вероятно, если миграция пользователи таблицы была порождена Завещанием, то схема включает в себя следующее:

"encrypted_password" varchar(128) DEFAULT '' NOT NULL 

SQL, который вызывает ConstraintException включает в себя это (опущено для удобства чтения):

SQL (14.0ms) INSERT INTO "users" (..., "encrypted_password", ...) VALUES (..., ?, ...) [..., ["encrypted_password", nil], ...] 

Итак, что-то говорит вашему адаптеру базы данных установить encrypted_password = nil.

Вы должны быть в состоянии обойти это либо запустить миграцию, которая удаляет NOT NULL ограничения на encrypted_password, или же, как вы сделали, проходит в encrypted_password, но только убедитесь, что он пуст на первом этапе, но присутствуют на втором этапе.

+0

Вау - большой улов! Это сработало! Я удивлен, что в учебнике не говорилось об этом ?! : о –