【问题标题】:Rails HABTM: Select everything a that a record 'has'Rails HABTM:选择记录“具有”的所有内容
【发布时间】:2015-08-23 00:52:05
【问题描述】:

我有三个表:projects、technology 和 projects_technologies(项目 ID 与技术 ID 之间的映射)。我有两个模型:项目和技术。项目拥有并属于许多(HABTM)技术,反之亦然。现在我正在尝试获取属于给定项目的技术的所有名称(或活动记录,如果有办法的话)。这是我所做的 SQL 语句,使用 5 作为给定的项目 ID:

SELECT name FROM technologies WHERE id IN (
  SELECT projects_technologies.technology_id FROM projects_technologies
  WHERE projects_technologies.project_id = 5
);

我可以连接到数据库并运行查询,但由于我已经设置了具有 HABTM 关系的模型,我想知道是否有“Rails 方式”来执行此操作。我一直在查看此文档 http://guides.rubyonrails.org/active_record_querying.html,但我不知道是否以及如何将其应用于此类查询。

更新

原来我只需要这个:

Project.find(5).technologies

【问题讨论】:

  • Technology.joins(:projects).where('projects.id = ? ',5).select('technologies.name') 试试这个

标签: ruby-on-rails postgresql join has-and-belongs-to-many


【解决方案1】:

等效的活动记录查询将是

Technology.select('name').where("id IN (?)", ProjectTechnology.where("project_id = ?", 5).pluck(:technology_id))

希望这会有所帮助!

【讨论】:

  • 谢谢!我不知道采摘。我需要制作一个 ProjectTechnology 模型才能使用它吗?这是我在控制台中运行它时得到的:NameError: uninitialized constant ProjectTechnology
  • 是的,你需要一个模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多