読者です 読者をやめる 読者になる 読者になる

find_by_sql

Ruby

hogeとfugaが多対一のとき、ActiveRecord#find_by_sqlでhogeを取得する

hoges = Hoge.find_by_sql(["SELECT * FROM hoges INNER JOIN fugas ON hoges.fuga_id = fugas.id WHERE fugas.code = ?", "0003"])

inner joinを使ってデータを取得したとき、joinする側とされる側に同じ名前のカラムがあると、正しくインスタンスが作られないんですね。たとえばこの例のテーブルでhogesにもfugasにもnameというカラムがあると、hogeのnameにfugaのnameが入ってしまうことがある。

SELECT hoges.* FROM hoges INNER JOIN ....

としてやらないとダメみたいですね。

あれ?常識ですか?