rails:3436
From: Shinya Kawaji <kawaji@g...>
Date: Thu, 27 May 2010 20:53:08 +0900
Subject: [rails:3436] Re: 制約条件付きModelのDRY化
かわじ、です。 > あるModelのコレクションを作成する際に、ログインユーザの権限によって > 制限をかけるためにwith_scopeを使って以下のような記述を行いました。 > 現状これを複数のModelに記述しているため、DRYにしたいと考えてます。 > > どこにどのように記述すべきでしょうか。 「Moduleにして extend」ではいかがでしょうか。 module Restricted def restricted {} # Overwrite this method end def find_with_privileged_scope(*args) with_scope(restricted){ find_without_privileged_scope(*args) } end def count_with_privileged_scope(*args) with_scope(restricted){ count_without_privileged_scope(*args) } end def self.extended(base) base.class_eval{ class << self alias_method_chain :find, :privileged_scope alias_method_chain :count, :privileged_scope end } end end class Foo < ActiveRecord::Base extend Restricted def self.restricted # ここに権限毎の制約条件を設定 {:find => {:conditions => ["owner_id = ?", User.current_user]}} end private_class_method :restricted end 何となく「extend より includeの方が良い」という場合は、 includeする時にクラスメソッドの呼び出しと定義を行うmodule書式 http://d.hatena.ne.jp/zariganitosh/20080817/1219021965 という記事が、私には分かりやすいものでした。 -- ML: rails@r... 使い方: http://QuickML.com/
3435 2010-05-27 08:58 [hisano@s... ] 制約条件付きModelのDRY化 -> 3436 2010-05-27 13:53 ┗[kawaji@g... ] 3437 2010-05-28 02:30 ┗[hisano@s... ] Re: 制約条件付きModelのDRY化【解決】