查询基础上HABTM协会

问题描述:

我想放在一起的ActiveRecord的查询是部分地基于projectitem之间的HABTM关联。这就是我想要做的事:查询基础上HABTM协会

@project = Project.find(params[:id]) 
@company = Company.find(params[:cid]) 
@items = @company.items.where("items.public" => true OR "items.project_ids" => @project.id) 

我收到各种错误在这里 - 先用OR,然后用items.project_ids不被认可,等我怎样才能正确地写这个查询?

首先,如果你要使用OR,那么你就需要使用一个字符串,而不是哈希语法。 其次,project_ids是Rails的增加了一个充满活力的领域 - 做同样的在数据库级别,你将不得不包括连接表并使用它。

然而,连接表是不是在Rails的一个认可的协会,所以我认为你将不得不手动指定的连接。

像这样的东西应该工作:

@company.items.joins("left join items_projects on items_projects.item_id = items.id").where("items.public = true OR items_projects.project_id = ?", @project.id) 

假设你使用Rails的标准HABTM表名