2

Rails 3 アプリケーションには 3 つのモデルがDailyDataありDailyDataVehicleVehicle多対多の関係があります。

関連付けを使用してモデルを更新すると、データベースが更新されないことがわかったので、戻ってそれらの移行を追加します。belongs_toまた、幸運なことに、との違いを知っていると自信を持って考えることがhas_manyできますが、移行ファイルでは、それが正しいかどうかわかりt.referencesません。
そのため、移行モデルに名前を付け、テーブルAddDailyDataToDailyDataVehicleに追加したいと思います。これは多対多の関係なので、関係テーブルに入れたいのですが、それがわかるかどうかはわかりません。 クラスの関連付けとデータベースの関係を少し混同している可能性があります。もし混同している場合は、これを明確にしてください。 もしもdailyData_iddaily_data_vehiclesid keyDailyDataVehiclest.references

t.referencesは私が望むものではありません。関係を手動で宣言する必要has_manyがありますか?もしそうなら、その構文は何ですか?

現在のスキーマ ファイル:

create_table "daily_data_vehicles", :force => true do |t|
  t.integer  "vehicle_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end
add_index "daily_data_vehicles", ["vehicle_id"], :name => "index_daily_data_vehicles_on_vehicle_id"

移行 (試行):

class AddDailyDataToDailyDataVehicle < ActiveRecord::Migration
  def change
    change_table :dailyDataVehicles do |t|
      t.references :dailyData
    end
    add_index :dailyDataVehicles, :dailyData_id
  end
end

移行が正しく機能した場合、スキーマ ファイルは次のようになるはずです。

create_table "daily_data_vehicles", :force => true do |t|
  t.integer  "vehicle_id"
  t.integer  "dailyData_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end
add_index "daily_data_vehicles", ["vehicle_id"], :name => "index_daily_data_vehicles_on_vehicle_id"
add_index "daily_data_vehicles", ["dailyData_id"], :name => "index_daily_data_vehicles_on_daily_data_id"

違いはt.integer "dailyData_id"add_index "daily_data_vehicles", ["dailyData_id"], :name => "index_daily_data_vehicles_on_daily_data_id"

4

1 に答える 1

1
class AddDailyDataToDailyDataVehicle < ActiveRecord::Migration
  def change
    add_column :daily_data_vehicles, : daily_data_id, :integer
    add_index :daily_data_vehicles, :daily_data_id
  end
end

class DailyDataVehicle < ActiveRecord::Base
  belongs_to :daily_data
end

class DailyData < ActiveRecord::Base
  has_many :daily_data_vehicles
end
于 2012-12-13T05:59:23.210 に答える