查询基础上HABTM协会
问题描述:
我想放在一起的ActiveRecord的查询是部分地基于project
和item
之间的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表名