3

ユーザーモデルを使用し、スコープのないDeviseを使用しているレールアプリがあります。アプリに activeadmin gem も追加しました。Active Admin は、アプリケーションに管理ダッシュボードを追加するために使用される gem です。ユーザーのログインに Devise を使用し、管理者用に別の admin_user モデルを作成します。

ログインしていない匿名のユーザーがショッピング カートを作成し、session[:cart_id]. ユーザーがログインした場合、ユーザーをカートに関連付けたい

Cart.find(session[:cart_id]).user = current_user 

私は Wardens callbacks wardens callbacksを使用してこれを実装することを計画していました。

Warden::Manager.after_set_user :scope => :user do |user, auth, opts|

    Cart.find(session[:cart_id]).user = user 

end

ただし、それを行うとエラーが発生します。

<% unless user_signed_in? %>エラーをスローします:admin_user user is not logged in

誰が何が起こっているのか考えていますか?

関連する質問を見てきましたが、助けにはなりません:

Rails で Warden/Devise after_authentication コールバックからセッションにアクセスする方法

ワーデンコールバックはレールアプリのどこに配置する必要がありますか?

4

2 に答える 2

2

AdminUserActive Admin が使用するモデルも、このコールバックを実行します。したがって、おそらく、if で問題を解決できます。

 Warden::Manager.after_set_user :scope => :user do |user, auth, opts|
   Cart.find(session[:cart_id]).user = user if user.class == User
 end
于 2011-12-03T16:27:22.753 に答える
2

実際には、デバイス初期化ファイルの warden でデフォルトのスコープを設定することで問題が解決されたことが判明しました。

  # Configure the default scope given to Warden. By default it's the first
  # devise role declared in your routes (usually :user).
  # config.default_scope = :user

ユーザーのデバイス ルートの上にアクティブな管理ルートが追加されたため、adminuser がデフォルトのユーザーになりました。

于 2012-02-14T14:44:13.287 に答える