LoginSignup
12
10

More than 5 years have passed since last update.

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

Posted at

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

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

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10