Ruby on rails Rails,为什么join返回非uniq值的数组?
我用Rails3作为例子,但我相信Rails2.3也是如此 假设我有一个模型城市,它有很多位置。我试着寻找有地理位置的城市 我使用以下代码: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",
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的敏捷性
我有两个问题:
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')
?