0

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

当我做:

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

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

然后当我这样做时:

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

我得到一个空集。

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

4

1 回答 1

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}%"]
    )
于 2012-12-04T05:11:55.783 回答