Railsで多くの情報を収集するフォームがあります。このフォームの一部は、新規ユーザーが登録するフィールドです。 Deviseには、特に新しいユーザーを作成するためのコントローラー/アクションがあるため、別のレコードを作成するまったく異なるアクションでユーザーをプログラムで作成する方法がわかりません。ユーザー登録フォームを個別に用意することはできません。 Authlogicで簡単にできるように、ユーザーを作成してログインする方法がわかりません。
私はAuthlogicとDeviseの両方を使用しましたが、それぞれに長所と短所があると思います。 Deviseを使用すると、新しいプロジェクトを「すぐに始める」ことがどれほど迅速かが気に入っていますが、それをカスタマイズするのは苦痛のようです。 AuthlogicにはRails 3で多くの問題があったため、Deviseに切り替えました。現在、新しいプロジェクトに取り組んでおり、ゼロから始めています。
したがって、この質問には2つの潜在的な答えがあると思います。(a)Deviseでこれを行う方法、または(b)代わりにRails 3でAuthlogicに切り替える必要がある理由。
新しいユーザーモデルを作成するだけで、新しいDeviseユーザーを作成できます( https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interfaceを参照してください )
@user = User.new(:email => '[email protected]', :password => 'password', :password_confirmation => 'password')
@user.save
新しく作成したユーザーにサインインするには、sign_in @user
DeviseがまだUserオブジェクトの必須フィールドに入力していないため、sign_inの前に新しく作成されたユーザーの保存は失敗します。したがって、Davidのコードは現在のページで機能しますが、セッションが設定された後にのみユーザーが保存されるため、次のページはサインインしているユーザーを取得しません。これは私がMongoidを使用しているときに起こり、Mongodb特有の問題かどうかわかりません。
この問題に対処するには、sign_inを2回呼び出す非常に不完全なソリューションがあります。最初のsign_inはユーザーを保存します。それは機能しますが、人々は確かにそれを改善できます。
@user = User.new(:email => '[email protected]',
:password => 'password',
:password_confirmation => 'password')
# This will save the user in db with fields for devise
sign_in @user
# :bypass is set to ignore devise related callbacks and only save the
# user into session.
sign_in @user, :bypass => true
この質問を見ている新しい人々のために...
これを行う簡単な方法は
config/routes.rb
次のような行が必要です。
devise_for :users
そのため、deviseが使用するパスプレフィックスを追加するだけです。
devise_for :users, :path_prefix =>'auth'
それが役に立てば幸い!