Railsアプリケーションですべてのモデルに対してnamed_scopeを定義しようとしています。すべてのモデルでnamed_scopesとその他のActiveRecordリレーションシップを定義しようとしています
現在のところ、私はActiveRecord :: Base用のイニシャライザを作成し、そこに通常のメソッドを配置することで、これに近づくことができました。 もちろん、これはクエリチェーンの作成に関しては本当の利点はありません。おそらく、仕事を終わらせるための最も難しい方法です。
しかし、私はhas_many、named_scopeなどを試してみるとうまくいきません。ActiveRecordメソッド。
named_scopeが正しくない可能性があることを理解していますが、実際にはnamed_scopeを定義する手助けが必要です。また、私は現在Ruby ACL GEMに興味がありません。
で初期化子/:
class ActiveRecord::Base
has_many(:permissions)
named_scope(:acl_check, lambda do |user_id, method|
{
:include => :permission,
:conditions => [
["permissions.user_id=?", user_id],
["permissions.method=?", method],
["permissions.classname=?", self.class.name]
]
}
end)
# Conducts a permission check for the current instance.
def check_acl?(user_id, method)
# Perform the permission check by User.
permission_check = Permission.find_by_user_id_and_instance_id_and_classname_and_method(user_id, self.id, self.class.name, method)
if(permission_check)
# If the row exists, we generate a hit.
return(true)
end
# Perform the permission check by Role.
# Otherwise, the permissions check was a miss.
return(false)
end
end
私のアプリのすべてのモデルにnamed_scopesを追加するために使用できる代替方法はありますか? 通常、私はこのメソッドで大丈夫ですが、named_scopeのようにチェーンに参加できません。また、単純なメソッドを使用すると、より多くのクエリのアクティビティとオーバーヘッドがあります。 –
あなたが行っているように名前付きスコープを定義すると、それは自分のアプリケーションで機能します。代わりに、http://www.harukizaemon.com/2006/10/abstract-activerecord-classes-by.htmlのような抽象的なactiverecordクラスを使用して、通常の継承を使用することもできます。 has_manyなどを取得するには、ほとんどの場合、各モデルのクラス本体にメソッド呼び出しを追加する必要があります( –
)。抽象クラスを使用すると、すべてのモデルがTHATクラスを代わりに拡張する必要があります。 –