我正在尝试在ActiveRecord中组合一个查询,该查询部分基于project
和item
之间的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
无法识别,等等。如何正确编写此查询?
答案 0 :(得分:1)
首先,如果您要使用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表名