ユーザーと呼ばれるモデルがあり、その一部は作成者と見なされます。これは、Rolesと呼ばれるテーブルを介して実行されます。このテーブルには、さまざまなロールがリストされています。「作成者」は1つです。アクセス許可と呼ばれるテーブル内の多対多の関連付けは、ロールとユーザーをリンクします。
ユーザーが作成者のアクセス許可を持っているかどうかを確認するために、その特定のユーザーにリンクされているアクセス許可を実行し、それらのいずれかが作成者のアクセス許可にもリンクしているかどうかを返すメソッドがあります。
このシステムは私によく役立っています。ただし、サイトで著者を検索して注文するのは不格好です。私がやりたいのは、シンプルで優雅なことです。理想的には、Users.authors.order( "date_joined")などのことを言うことができる名前付きスコープのようなものです。
現在のところ、「作成者」ユーザーのグループを取得するには、すべてのユーザーをデータベースから取り出し、一度に1人ずつ実行し、作成者のアクセス許可を検索してから追加する以外に方法はありません。見つかった場合は、ユーザーの配列に。
これは、特に著者のリストをビューに表示するたびに実行する必要があるため、かなり不愉快に思えます。
もっと良い方法はありますか?
編集-解決策:
以下の役立つアドバイスとhttp://railscasts.com/episodes/215-advanced-queries-in-rails-3?view=asciicastからのヒントに従って、次のことをまとめることができました。
User.rbの場合:
class User < ActiveRecord::Base
scope :authors, joins(:permissions) & Permission.author_permissions
scope :admins, joins(:permissions) & Permission.admin_permissions
Permission.rb内:
class Permission < ActiveRecord::Base
scope :author_permissions, where("role_id = ?", Role.find_by_rolename("author"))
scope :admin_permissions, where("role_id = ?", Role.find_by_rolename("administrator"))
そして出来上がり!今、私は呼び出すことができUsers.authors
、それは魅力のように機能します。