【发布时间】:2015-02-24 06:29:00
【问题描述】:
我正在开发一个应用程序,其中用户参与一个或多个事件,因此可以根据他们在这些事件中扮演的角色说“拥有”事件。我正在使用 Rolify 将用户与事件相关联。 Rolify 根据用户在该事件中所占据的角色形成用户与该事件之间的关联。 Rolify 更关心返回有关用户角色的数据,但不关心用户在其中拥有角色的事件,因此不会返回有关事件的数据(除了其 ID)。
所以,我可以这样写一个方法:
@user.roles
并获取与用户关联的所有角色。
其中一个角色如下所示:
=> #<Role id: 1, name: "admin", resource_id: 1, resource_type: "Event", created_at: "2014-12-19 04:00:33", updated_at: "2014-12-19 04:00:33">
我想做的就是说
@user.events(roleName)
并获取与 roleName 关联的所有事件。
显然,仅考虑通过 Rolify 提供给我的东西,我无法做到这一点,因此我在我的用户模型上创建了一个方法来提供帮助:
def events roleName=nil
events_list = []
self.roles.each do |role|
unless roleName.nil?
if role.name == roleName && role.resource_type == "Event"
events_list.push(role.resource_id)
end
else
events_list.push(role.resource_id)
end
end
Event.find(events_list)
end
我担心的是
- 这种方法在某种程度上违反了单一职责原则。
- 此方法需要多次数据库调用才能最终获得事件——一个到角色,然后另一个到事件。 (我对这种事情没有经验,所以我不确定它到底有多糟糕。)
有没有更好的方法来获取用户的事件,同时保持我的 Rolify 角色设置?
【问题讨论】:
标签: ruby-on-rails ruby rolify