Help us understand the problem. What is going on with this article?

ActiveRecordで結合処理時のperhaps you misspelled it?

More than 3 years have passed since last update.

Rails4でテーブルをleft outer join しようとしたら以下のエラーが出てはまったのでメモ。

Association named 'companies' was not found on DailyStockInfo; perhaps you misspelled it?

タイプミスを疑ってさまよっていましたが、modelに外部キーの記載がなかったことが原因でした。

以下のようにmodelを記載すればOK
(参照元テーブルAを参照先テーブルをBとします。)

class TableA < ActiveRecord::Base
  has_many :check_stock , foreign_key: [:name,:date]
end
class TableB < ActiveRecord::Base
  belongs_to :daily_stock_info ,foreign_key: [:name,:date]
end

このとき生成されたSQLを見ると、結合させたいキーが入れ子になる事象が発生しました。

~
TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.date 
 AND TableA.date = TableB.name
~

とりあえず、model側の外部キーの記載を入れ子にすることで解消しました。

class TableA < ActiveRecord::Base
  has_many :check_stock , foreign_key: [:name,:date]
end
class TableB < ActiveRecord::Base
  belongs_to :daily_stock_info ,foreign_key: [:date,:name]
end

その後このケースは再現してないですが、こういったこともあるようです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away