2016-02-04 107 views
0

我在索引操作中遇到了.where语句。嵌套资源的Rails .where语句

在我的Deals控制器中,我想列出current_user的银行参与的所有交易。

下面是我的模型:

class User < ActiveRecord::Base 
    belongs_to :bank 
end 
class Deal < ActiveRecord::Base 
    has_many :pools 
end 
class Pool < ActiveRecord::Base 
    belongs_to :deal 
    has_many :participating_banks, dependent: :destroy 
    has_many :banks, through: :participating_banks 
end 
class ParticipatingBank < ActiveRecord::Base 
    belongs_to :pool 
    belongs_to :bank 
end 

这里是我的优惠控制器Index操作:

def index 
     @deals = Deal.all 
    end 

我没有发现任何方式说:“我只希望看到一个协议,如果这笔交易至少有一个在current_user.bank被添加的游戏池。

有什么想法?

非常感谢:)

回答

0

你应该做inner join和查询中联接表ID。你可以通过以下方式在Rails中轻松完成:

def index 
    @deals = Deal.joins(pools: :banks).where(banks: { id: current_user.bank_id }) 
end 
+0

非常感谢Marek!它会阻止人们访问他们未被授予的交易(他们的银行不在场?)。再次感谢您的帮助! –

+0

是的,它应该。如果你愿意,你可以在控制台上做一些测试。 –

+0

好的很好:)即使他们输入特定交易的网址? –