Ruby on Rails Join Table Associations
我有一个像这样的 Ruby on Rails 应用程序设置:
用户模型
1 | has_and_belongs_to_many :roles |
榜样
1 2 | has_many :transactions has_and_belongs_to_many :users |
交易模型
1 | belongs_to :role |
这意味着使用了一个名为
1 2 | user = User.find(1) transactions = user.roles.first.transactions |
这将返回与分配给用户的第一个角色相关联的事务。如果用户有 2 个角色分配给他们,目前要获取与第二个角色关联的事务,我会这样做:
1 | transactions = user.roles.last.transactions |
我基本上是想找到一种方法来建立关联,这样我就可以根据用户和角色之间的关联中定义的角色通过类似的方式获取用户的交易:
1 2 | user = User.find(1) transactions = user.transactions |
我不确定这是否可能?我希望你明白我想要做什么。
如果您不想执行单独的 SQL 查询来查找每个角色的事务,您可以先获取用户的 role_ids,然后使用单个查询查找具有这些角色 id 的所有事务:
1 2 3 4 5 6 | class User < ActiveRecord::Base #... def transactions Transaction.scoped(:conditions => {:role_id => role_ids}) end end |
1 | user.transactions.all(:limit => 10, :conditions => [ ... ]) |
您可以向
1 2 3 4 5 | class User < ActiveRecord::Base def transactions user.roles.collect { |role| role.transactions }.flatten end end |