0

My Rails 3.2プロジェクトには、デバイスによって生成されたユーザーと、そのユーザーに固有のデータをすべて含むモデルのセットがあります。ログインしたユーザーが、コントローラーによって公開されているAPIを介して自分のデータにのみアクセスできるようにしたいと思います。

さて、これを可能にするブルートフォースの方法は、すべてのコントローラーを次のようなものから変更することです。

def index
  @stuff = Stuff.all

def index
  @stuff = Stuff.find_all_by_user_id current_user.id

そして、私はすべての単一のコントローラーのすべての単一のアクションに対してこれを繰り返さなければなりません。同じ効果を達成するためのより簡潔でドライな方法はおそらくありますか?私が書かなければならない定型文の量は間違っていると感じています。

ありがとう!

4

2 に答える 2

1

CanCan gemを見てください。

于 2012-05-29T21:54:31.713 に答える
0

a) application_controller.rbに次のようなbefore コールバックを含めることができます

def find_stuff_from_current_user
  @stuff = Stuff.find_all_by_user_id current_user.id
end

そして、次のようにすべてのコントローラーでこれを呼び出します。

before_filter :find_stuff_from_current_user

これで、すべてのコントローラーとすべてのアクションで @stuff 変数を使用できるようになりました。

b) あるいは、model.rbでスコープを使用して、次のように言うこともできます。

scope :stuff_from_current_user, where(:user => current_user)
于 2012-05-29T22:16:08.957 に答える