在 Rails 查询中提取关联模型的属性



在我的rails应用程序中,集合有许多项目,并且项目有许多步骤。

我想获取集合项目中步骤的所有id,我想知道是否可以在一个查询中完成所有操作。

例如,我知道我可以做以下

step_ids = []
@collection.projects.each do |project|
    project.steps.each do |step|
       step_ids << step.id
    end
end

但有可能做以下事情吗:

此处的@collection.projects.include(:steps).pluck("step.id")//语法不正确

试试这个:

Step.joins(:project).where(projects: { collection_id: @collection.id }).pluck(:'steps.id')

请注意,连接使用project,where子句使用projects。第一个对应于belongs_to关系,后者是数据库表的名称。

编辑:在项目和集合之间存在多对多关系的情况下,假设项目属于project_collection(然后是has_many :collections, through :project_collection

Step.joins(:project => :project_collection)
    .where(project_collections: { collection_id: @collection.id })
    .pluck(:'steps.id')

不幸的是,我不认为我们可以在一个查询中通过AR实现这一点。您可以在下面进行嵌套查询,以在对数据库的两个查询中检索它:

Step.includes(:projects)
    .where(projects: { id: Projects.includes(:collections)
    .where(collections: { id: @collections.id }).pluck(:id) } )
    .pluck(:id)

最新更新