Ruby on rails Rails,为什么join返回非uniq值的数组?

Ruby on rails Rails,为什么join返回非uniq值的数组?,ruby-on-rails,unique,join,Ruby On Rails,Unique,Join,我用Rails3作为例子,但我相信Rails2.3也是如此 假设我有一个模型城市,它有很多位置。我试着寻找有地理位置的城市 我使用以下代码: City.joins(:locations) 但输出数组是: => [#<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow",

我用Rails3作为例子,但我相信Rails2.3也是如此

假设我有一个模型城市,它有很多位置。我试着寻找有地理位置的城市

我使用以下代码:

City.joins(:locations)
但输出数组是:

=> [#<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">, #<City id: 5, name: "moscow", created_at: "2010-07-02 15:09:16", updated_at: "2010-07-02 15:09:16">]
=>
数组长度为4(莫斯科的位置数)

在什么情况下它会有用?输出数组中一个对象的4个副本的目的是什么

我可以使用City.joins(:locations).uniq,但我失去了arel的敏捷性

我有两个问题:

  • 为什么joins返回非唯一数组
  • 出于此目的,您更喜欢使用什么来代替联接

  • Join本质上说是将两个表合并,并将其视为一个表,将找到的内容发送回。这意味着它将找到城市和位置的每一个组合(Rails根据您的模型中的“属于/拥有”多个关系进行匹配,从而提供帮助)

    执行
    City.join(:locations)
    将用于查找城市中的所有位置。用另一种方法(
    Location.joins(:city)
    )查找位置所在的城市


    现在,要查找具有某些位置的城市列表,您可以尝试
    City.select(:City.join(:locations).group(:cities.id')
    子句告诉它只带回城市,而group()子句告诉它不要带回重复的副本。

    谢谢!团体是我需要的!但是为什么rails不想自己分组呢?输出rails对象是没有任何位置的城市数组。而且,我认为这种输出没有用例。谢谢你的帮助。有一个问题-City.x不需要select语句就自然会返回城市吗?@edebill有没有办法在每个查询中省略这个
    组('cities.id')