基于HABTM关联的查询

时间:2011-09-20 22:03:33

标签: ruby-on-rails ruby-on-rails-3 activerecord has-and-belongs-to-many

我正在尝试在ActiveRecord中组合一个查询,该查询部分基于projectitem之间的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无法识别,等等。如何正确编写此查询?

1 个答案:

答案 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表名