Rails HABTM:选择记录所拥有的所有内容'

时间:2015-06-08 13:58:02

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

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

public class DBService extends IntentService {

@Override
public void onHandleIntent(Intent intent) { 
    if (intent.getAction() == "com.tac.save_notification") {
        //parse your json here...
        DBHelper.save(...);
    }
}
}

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

更新

原来我所需要的就是:

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

1 个答案:

答案 0 :(得分:1)

等效的有效记录查询将是

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

希望这有帮助!