我有类似的Ruby on Rails应用程序设置:
用户模型
has_and_belongs_to_many :roles
角色模型
has_many :transactions
has_and_belongs_to_many :users
交易模型
belongs_to :role
这意味着使用名为roles_users
的连接表,这也意味着用户只能看到通过角色分配给他们的事务,用法示例:
user = User.find(1)
transactions = user.roles.first.transactions
这将返回与分配给用户的第一个角色关联的事务。如果用户分配了2个角色,那么为了获得与第二个角色关联的事务,我会这样做:
transactions = user.roles.last.transactions
我基本上试图找到一种设置关联的方法,这样我就可以根据用户和角色之间关联中定义的角色通过类似的方式获取用户的事务:
user = User.find(1)
transactions = user.transactions
我不确定这是否可行?我希望你明白我要做的事。
答案 0 :(得分:1)
如果您不想执行单独的SQL查询来查找每个角色的事务,您可以先为该用户获取role_ids,然后使用单个查询查找具有这些角色ID的所有事务:
class User < ActiveRecord::Base
#...
def transactions
Transaction.scoped(:conditions => {:role_id => role_ids})
end
end
此处使用了 Transaction.scoped
,因此您可以在必要时添加更多条件,例如
user.transactions.all(:limit => 10, :conditions => [ ... ])
答案 1 :(得分:0)