在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关系,后者是db表的名称。
编辑:在项目和集合之间存在多对多关系的情况下,假设项目属于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)
- Rails has_many:through,null belongs_to,multiple belongs_to和belongs_to的删除?
- 在Rails has_many中保存关联记录的顺序:通过关联
- Ruby on Rails使用连接进行ActiveRecord查询
- Ruby委托类/关系级方法
- ActiveRecord加入遗留数据库的表
- 在has_many关联中为“no children”创建named_scope
- 如何在activerecord之外创建activerecord样式validation?
- 从has_many中删除对象但不删除Rails中的原始记录?
- 如何在ARel中使用CONCAT()等函数?