如何使用includes创建查询对象

时间:2014-10-28 12:15:27

标签: ruby-on-rails ruby activerecord

Platform和PlatformCategory连接为belongs_to has_many

我对我的数据库有这样的查询

    p = PlatformCategory.where(params[:platform_category_ids]).includes(:platforms)

我想使用与p变量相关联的每个平台ID并将其放入新对象中,如下所示:

    p.each { |plat_cat| Campaign.create(..., some_id: plat_cat.platform.id) }

但是PlatformCategory has_many平台,在这里我想在plat.cat上调用每个块,但它听起来不像Ruby方式。

UPD 当我传递像[1,2,3,4]这样的数组时一切正常,但是在params中使用数组我得到' NoMethodError:undefined method`joins'对于Array'

1 个答案:

答案 0 :(得分:0)

你在找这个吗?:

p = PlatformCategory.where(id: [1,2,3,4]).joins(:platforms).select('platforms.id)

然后:

p.each { |plat_cat| Campaign.create(..., some_id: plat_cat.id) }

UPDATE :由于find不会链接joins方法,因为它会在查询后返回一个数组(如果您将数组作为参数传递)。您可以这样做以避免这种情况:

p = PlatformCategory.joins(:platforms).select('platforms.id').find([1,2,3,4])