3

Devise でユーザーを作成しようとしていますが、問題が発生しています。

home#land

def land
  @resource = User.new
  @devise_mapping = Devise.mappings[:user]
end

land.html.haml

= form_for @resource, :as => :user, :url => registration_path(:user), :remote => true do
  = label_tag 'user[email]', raw("<h3>Stay Informed!</h3>")
  = text_field_tag 'user[email]', nil, {:placeholder => "Your email", :required => true}
  %input(type="submit" name="commit" value="Add")

user.rb

class User < ActiveRecord::Base
  before_validation(:on => :create) do
    self.password = "none"
    self.password_confirmation = "none"
  end
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :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
end

デフォルトの Devise::RegistrationsController が使用されています。

これは送信時に表示されます:

development.log

Started POST "/users" for 127.0.0.1 at 2013-04-24 20:49:46 -0300
Processing by Devise::RegistrationsController#create as JS
  Parameters: {"utf8"=>"✓", "user"=>{"email"=>"me@mjohnst.com"}, "commit"=>"Add"}
  [1m[35m (0.3ms)[0m  BEGIN
  [1m[36mUser Exists (0.5ms)[0m  [1mSELECT 1 AS one FROM "users" WHERE "users"."email" = 'me@mjohnst.com' LIMIT 1[0m
  [1m[35m (0.2ms)[0m  ROLLBACK
  Rendered devise/registrations/create.js (0.4ms)
Completed 200 OK in 84ms (Views: 4.1ms | ActiveRecord: 1.0ms)

ただし、次の場合rails console:

2.0.0p0 :011 > User.all
  User Load (0.5ms)  SELECT "users".* FROM "users"
 => #<ActiveRecord::Relation []> 

そしてlocalhost:5000/users完全に空です...

DB にユーザーがいないのに、User Exists と ROLLBACK が発生するのはなぜですか?

4

1 に答える 1

19

ユーザー存在クエリは、登録しようとしているのと同じ電子メールを持つユーザーがいないことを確認するバリデーターからのものです。INSERT クエリがないため、ユーザーが登録されることはありません。

おそらく検証の失敗です。この場合、パスワードが短すぎる可能性があります (デフォルトの Devise パスワードの長さの検証では、少なくとも 8 の長さが必要ですが、あなたのパスワードはわずか 4 です)。

成功した 200 応答を受信して​​います。これは、どの検証が失敗したかを説明するフラッシュ メッセージとともに登録にリダイレクトされているためです。

于 2013-04-25T00:10:50.040 に答える