0

私が理解している限りでは、選択したセッション ストアに関係なく、Rails アプリは Devise 用に 1 つのデータベース クエリを送信し、Rolify 用に 1 つのデータベース クエリを送信します。

ここに私の関連コードがあります:

<% if !user_signed_in? %>
 ..login  buttons...
<% else %>
<% unless current_user.has_role? :pro %>
 <%= link_to "Upgrade!", '#' %> |
<% end %>
  <%= link_to current_user.full_name, edit_user_registration_path %> |<%= link_to "Çıkış", destroy_user_session_path, method: :delete %>
<% end %>

私の開発ログからわかるように、これらのコードはこれらの SQL クエリを引き起こします。

12:30:22 web.1  |   User Load (2.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 352 ORDER BY "users"."id" ASC LIMIT 1
12:30:22 web.1  |    (2.7ms)  SELECT COUNT(*) FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND (((roles.name = 'pro') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL)))  [["user_id", 352]]

私が疑問に思っているのは、これらのクエリはすべて必要ですか? これを行うより良い方法はありませんか?

私が間違っていなければ、user_signed_in?ヘルパー メソッドは常にデータベースに呼び出しを送信します。

sessionオブジェクトが存在するかどうかをチェックアウトしないのはなぜですか? ユーザーがログインした後、Userオブジェクトの必要な属性を保存できsession、ページが要求されるたびにデータベースにアクセスする必要はありませんか? すべての Cookie は Rails 4 で安全ですが、何が問題なのですか?

おそらく私は何かが欠けています。

誰かがこれを明確にできますか?

ありがとうございました

4

1 に答える 1