

has_many + through
で定義したmodelに紐づくデータを取得すると、データベース上は1件ずつしか存在しないのに、各データが重複して取得されてしまうケースが発生しました。

具体的な内容としては、

「apple」と「orange」というテーブルがあり、「apple_orange」という中間テーブルがあるとします。  
そして、appleのmodelファイルに

[code]

    has_many :oranges, :through => :apple_oranges
    
[/code]

と定義した場合、

[code]

    apple.oranges
    
[/code]

でapple_orangeを経由して orange のデータが取得できるはずです。

ここで、仮に以下のようなデータ状態だったとします。

[code]

    ・apple
    
    id|title
    --------
     1|AA
    
    ・orange
    
    id|title
    --------
     1|AA
     2|BB
     3|CC
    
    ・apple_orange
    
    id|apple_id|orange_id
    ---------------------
     1|       1|        1
     2|       1|        2
     3|       1|        3
    
[/code]

この場合、Apple.find(1).oranges の結果件数は 3件 だと思います。

これがorangeのデータがそれぞれ重複され 6件 取得できてしまうケースがありました。

今までにこのようなケースに遭ったことがなく、しかも、1回起こったものの、以降は発生していません。  
発生時にたまたまデータが2件ずつ存在した、ということはありません。  
Railsの内部的な問題でしょうか。  
ご存知でしたらご教示いただければと思います。

なお、環境は以下になります。

Ruby 1.8.7  
Rails 2.3.5  
CentOS 5.9


CC BY-SA 3.0
2015-10-25T02:48:46.317
18041
2016-06-14T09:35:54.627
12953
question
ruby-on-rails ruby
Railsでhas_manyで紐付いたデータがそれぞれ重複している


偶然のタイミングで発生するバグとしては考えにくい挙動ですが、もし事例があるなら[古いRailsのIssue](https://rails.lighthouseapp.com/projects/8994-ruby-
on-rails/tickets)に残ってるかもしれません。

それよりも、RubyもRailsもあまりに古すぎるので、速やかにバージョンアップすることをおすすめします。


CC BY-SA 3.0
2015-11-25T02:29:14.757
19267
2015-11-25T02:29:14.757
5793
18041
answer