2

現在、次のコードを使用していくつかのテスト データをシードしようとしています。


  # add vehicle
  trim = Trim.where(:id => 1 + Random.rand(250)).first
  model_year_array = trim.model_years.all(:select => :id).collect(&:id)
  vehicle = Vehicle.create(trim_id: trim.id, model_year_id: model_year_array[Random.rand(model_year_array.length - 1)])

それはかなり自明だと思います-基本的に、選択したトリムに適用できるmodel_year idの配列を取得し、ランダムなものを選択し、そのidを車両のmodel_year_idとして使用したいと考えています。

私が抱えている問題は、trim.model_years.all(:select => :id).collect(&:id)パーツがあいまいであるというエラーを生成していることです。エラーは次のとおりです。

SQLite3::SQLException: ambiguous column name: id: SELECT id FROM "model_years" INNER JOIN "model_year_trims" ON "model_years"."id" = "model_year_trims"."model_year_id" WHERE "model_year_trims"."trim_id" = 110

ID を選択すると model_year の ID が取得され、あいまいにならないようにコードを再フォーマットするにはどうすればよいですか?

4

3 に答える 3

11

結合を実行するときは、 id など、複数のテーブルに存在する列にプレフィックスを付ける必要があります。

model_year_array = trim.model_years.all(:select => "model_years.id").collect(&:id)

トリックを行う必要があります

于 2012-07-31T14:43:51.703 に答える
1

パーサーは、あるテーブルの列 ID を使用するか、他のテーブルの列 ID を使用するかを認識していません。次のようなものが必要です。

SELECT "model_years" ."id" 
  FROM "model_years" 
 INNER JOIN "model_year_trims" ON "model_years"."id" = "model_year_trims"."model_year_id"
 WHERE "model_year_trims"."trim_id" = 110
于 2012-07-31T14:57:01.067 に答える