如何从ActiveRecord中的父级调用子模型范围?

时间:2017-04-18 02:48:57

标签: ruby-on-rails activerecord scope

请帮我找到一种在父范围内调用子范围的方法。有什么方法可以实现这一点。

方案如下:

class Film < ActiveRecord::Base
  ...
  has_many :shows
  scope :active_shows, ->{
    joins(:shows)
  }
  ...
end

class Show < ActiveRecord::Base
  ...
  belongs_to :film
  scope :active_for_now, ->{
   ...
  }
  ...
end

从上面的例子中,我想知道如何从active_for_now调用范围active_showsshow表格包含字段start_timeend_time,当我致电Film.active_shows时,必须让所有电影都有当前时间的有效节目。

如果有任何解决方案,请帮助我,如果我出错了,请纠正。

2 个答案:

答案 0 :(得分:3)

我对范围和关联名称有点困惑,他们是否代表我没有看到的关系,但是要调用 console.log('data', data); //Showing the table value through console $(target).html('<table id="data_table"></table>'); $('#data_table').bootstrapTable(data); 上定义的范围,你可以使用{{3} }

has_many

答案 1 :(得分:3)

您可以设置单独的has_many association with a scope

class Film < ActiveRecord::Base
  has_many :shows
  has_many :active_shows, class_name: 'Show', ->{ Show.active_for_now }
end

主要优点是您可以在加入时直接使用关联:

@films = Film.eager_load(:active_shows).find(params[:id])