Rails条件查询连接表

时间:2012-12-04 00:18:40

标签: activerecord ruby-on-rails-3.2

我有一个连接表,将项目连接到具有多对多关系的标签。我正在尝试对所有项目进行分页视图,如果进行搜索,将包含名称或标记名称匹配的所有项目。

当我这样做时:

    search = "one"
    Item.all(:conditions=>["items.name LIKE ?", "%#{search}%"]);

我得到的结果项目中包含单词“one”。

然后当我这样做时:

    search = "one"
    Item.all(:joins=>[:tags], :conditions=>["items.name LIKE ?", "%#{search}%"]);

我得到一个空集。

为什么活动记录给我一个空集而不是仍然给我一个符合条件的结果?我怎样才能得到我想要的结果?

1 个答案:

答案 0 :(得分:0)

想出来。如果我的查询所需的内容为:joins=>[:tags],则INNER JOIN默认为OUTER JOIN。我的问题的解决方案是

    search = "one"
    Item.all(
        :joins=>['LEFT OUTER JOIN "tags_items" ON "tags_items"."webservice_id" = "webservices"."id" LEFT OUTER JOIN "tags" ON "tags"."id" = "tags_items"."tag_id"'], 
        :conditions=>["items.name LIKE ?", "%#{search}%"]
    )