Rails,在已经连接的表上过滤

时间:2017-11-11 22:12:28

标签: ruby-on-rails postgresql join filter include

我有一张表:有一列的句号:小时

我还有一个表:模拟属于:句点(因此它将period_id作为列)

我加入了2桌

@simulations=Simulation.join(:period) #Controller

现在在我看来,我必须循环我的模拟,但过滤基于"小时"列,存在于期间表上。

所以我尝试过像

这样的事情

在我看来,我必须循环模拟:

<% @simulations.where( :period => {:hour => count})each do |sim| %>

<% @simulations.periods.where(:hour => count )each do |sim| %>

同样,我想根据周期表中的数据过滤我的模拟。这些方法都不起作用。我也尝试过使用include和eager_loads,这些都不起作用。

我是否尝试过在轨道下无法实现的功能?

我也在使用postgres

1 个答案:

答案 0 :(得分:0)

尝试在控制器中使用此查询

@simulations = Simulation.where(periods: {hours: count}) # All simulations that belongs to periods with hours = count

请注意,“期间”中的's'并根据您的列名调整'小时'中的's'。

在视图中,直接使用模拟变量:

<%= @simulations.each do |sim| %>

您正在进行两次加入期间和模拟的相同查询。还要尽量避免在视图或控制器中对Model进行任何查询。相反,您应该在Model中创建一个方法并使用它来从上面的查询中获取结果。