0

ユーザーが待ち望んでいるRailsアプリケーションがあり、セッションにuser_idがあります。次のステップは、ユーザーに表示されるすべてのモデル データのスコープを作成することdata.user_id = session[:user_id]です。

各コントローラーで次のことができることを知っています

Controller.find_all_by_user_id(session[:user_id])

しかし、私にはおそらくもっと良い解決策があるようです。モデルにスコープを追加する可能性を見つけましたが、ここではセッションが不明であり、MVC パターンに関しては、そこにスコープを追加することはおそらくお勧めできません。このような user_id 制限をモデルからのすべてのデータに適用するソリューションはありますか?それとも、ユーザーデータを含むfind_all_by_user_idすべてのコントローラー関数を使用する必要がありますか?

4

2 に答える 2

3

あなたが正しく理解している場合、あなたは によっていくつかのデータにアクセスしたいと考えていますuser_id。これは、ユーザー モデルでリレーションシップを定義できることを意味しますhas_many :this_and_thatbefore_filterそうです、アプリケーション コントローラーで、現在のユーザー インスタンスを取得する関数を作成できます。このインスタンスを通じて、そのユーザーが利用できるすべてのデータにアクセスできます。その関数をヘルパー関数にすることもでき、それをビューで使用できます。

#User.erb
has_many :other_data

#ApplicationConroller.erb
def current_user
  @current_user ||= User.find_by_id(session[:user_id])
end

#OtherControllers
def index
  @other_datas = current_user.other_datas
end
于 2012-09-30T12:02:12.977 に答える
1

またはそのようなものを持つことができますbefore_filter :load_user_data, :if => current_user。メソッドは次のようになります。

def load_user_data  
 @data = ModelName.where(user_id: session[:user_id]) 
end

@data連鎖可能ActiveRecord::Relationになり、連鎖可能になります。またfind_all_by_user_id、本当に必要な場合は、各コントローラーで使用することも悪くありません。

于 2012-09-30T12:08:00.357 に答える