4

ユーザーが複数のプロファイルを持つことを許可しています (ユーザーは多くのプロファイルを持っています)。そのうちの 1 つがデフォルトです。私の users テーブルには、default_profile_id があります。

どこでも使用できる Devise の current_user のような「default_profile」を作成するにはどうすればよいですか?

この行はどこに置くべきですか?

default_profile = Profile.find(current_user.default_profile_id)
4

3 に答える 3

9

Devise の current_user メソッドは次のようになります。

def current_#{mapping}
  @current_#{mapping} ||= warden.authenticate(:scope => :#{mapping})
end

ご覧のとおり、@current_#{mapping}メモ化されています。あなたの場合、次のようなものを使用したいと思います:

def default_profile
  @default_profile ||= Profile.find(current_user.default_profile_id)
end

あらゆる場所での使用に関しては、コントローラーとビューの両方で使用することを前提としています。その場合は、次のように ApplicationController で宣言します。

class ApplicationController < ActionController::Base

  helper_method :default_profile

  def default_profile
    @default_profile ||= Profile.find(current_user.default_profile_id)
  end
end

を使用helper_methodすると、ビューでこのメモ化された default_profile にアクセスできます。このメソッドを にApplicationController配置すると、他のコントローラーから呼び出すことができます。

于 2013-10-05T05:23:26.387 に答える
3

メソッド内で定義することにより、このコードをアプリケーションコントローラー内に配置できます。

class ApplicationController < ActionController::Base
  ...
  helper_method :default_profile

  def default_profile 
    Profile.find(current_user.default_profile_id)
  rescue
    nil 
  end
  ... 
end

そして、アプリケーションで current_user のようにアクセスできます。default_profile を呼び出すと、利用可能な場合はプロファイル レコードが提供され、そうでない場合は nil が提供されます。

于 2013-10-05T04:54:26.533 に答える
1

ユーザーにメソッドを追加するか、 (推奨)profileを定義します。has_oneデフォルトのプロファイルが必要な場合はcurrent_user.profile、次のようになります。

has_many :profiles
has_one  :profile  # aka the default profile

私はショートカット メソッドを実装しませんが、次のようにします。

class ApplicationController < ActionController::Base

  def default_profile
    current_user.profile
  end
  helper_method :default_profile

end
于 2013-10-05T08:04:09.423 に答える