我有一个称为用户的模型,其中一些被认为是作者。这是通过一个名为 Roles 的表来完成的,该表列出了许多不同的角色:“作者”就是其中之一。名为 Permissions 的表中的多对多关联链接角色和用户。
为了检查用户是否具有作者权限,我有一个方法运行链接到该特定用户的权限,并返回它们中的任何一个是否也链接到作者权限。
这个系统对我很有帮助。但是,它使在网站上搜索和订购作者变得笨拙。我想做的是简单而优雅的事情,理想情况下,就像一个命名范围,它允许我说诸如 Users.authors.order("date_joined") 之类的东西。
就像现在一样,除了将所有用户从数据库中拉出,一次运行一个,搜索他们的作者权限,然后添加它们之外,我没有任何方法可以获取“作者”用户组如果找到,则发送给一组用户。
这似乎很不优雅,尤其是当我每次想在视图中显示作者列表时都必须这样做。
有没有更好的办法?
编辑——解决方案:
遵循以下有用的建议和来自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
了,它就像一个魅力。