0

Devits in Railsを使用して2段階の登録プロセスをセットアップしようとしており、これに続いてtutorial by Claudio Maraiがあります。私は、フォーム(最初のステップ)で電子メールアドレスを入力すると 、私はエラーがあっルーティングエラーだった、それは私はこれがためであった考え出しRegistrationsControllerRailsの2つのステップの登録とエラー - エラー

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"の存在は、the tutorialの最初のステップに記載されているように私のroutes.rb fileにあります。私は2つの選択肢を試してみたところ、どちらも同じエラーになりました。まず、routes.rb fileから:registrations => "registrations"を削除しました。それが機能しなかったとき、私はラインに再挿入し、このように見えたcontrollersディレクトリにregistrations_controller.rbを追加しました:

class RegistrationsController < Devise::RegistrationsController 
end 

私は2つのオプションが同じ効果を持っていると考えました - しかし - 私はとにかくそれを試してみました。

私が得たエラーは以下の通りであった:

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' 
    . 
    . 
    . 

上記のエラーは、私は本当に混乱しています!

同じフォームで、passwordpassword_confirmationフィールドを追加すると、スムーズに進みます。ユーザーアカウントが作成され、確認リンクがユーザーに送信されます。

私はこの点について助けていただきありがとうございます - ありがとう!私は使用していますRuby 1.9.3-p125Rails 3.2.1

+0

このチュートリアルはちょっと徹底しているようですが、何も見逃していないと思いますか?すなわち、Deviseのモジュール内で 'password_required?'メソッドをオーバーライドしますか? – Ashitaka

+0

@Ashitakaあなたが想像しているように、すでに20回チュートリアルを終えました! :P私はチュートリアルで説明した 'initializer'ファイルの中に' password_required? 'メソッドを持っています。 –

答えて

3

この問題は、Railsによる検証ではなく、データベースの制約に違反しているためです。

SQL (14.0ms) INSERT INTO "users" (..., "encrypted_password", ...) VALUES (..., ?, ...) [..., ["encrypted_password", nil], ...] 
:ConstraintExceptionはこの(読みやすくするために省略さ)を備えて引き起こしている

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

SQL:ユーザーテーブルの移行が工夫によって生成された場合は、スキーマはこれを含み、おそらくより

詳細

データベースアダプターにencrypted_password = nilを設定するよう指示するものがあります。

encrypted_passwordのNOT NULL制約を削除する移行を実行しているか、実行した通りにencrypted_passwordを渡しても問題ありませんが、最初の手順で空であることを確認してください。第2段階に存在する。

+0

うわー、凄いキャッチ!それはうまくいった! 私はチュートリアルでこれについて話していないのに驚いていますか? :o –