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
その後このケースは再現してないですが、こういったこともあるようです。