2

我在我的Rails 3應用程序中有三個模型,DailyDataDailyDataVehicleVehicle,這是一個多對多的關係。在Rails遷移中的參考(n | n關係)

我剛剛瞭解到,如果您使用關聯更新模型,它不更新數據庫,所以我回來並添加這些遷移。我也很幸運地自信地認爲我知道belongs_tohas_many之間的差異,但是,在我的遷移文件中,我不確定t.references的確如此。
因此,我將遷移模型命名爲AddDailyDataToDailyDataVehicle,並且想要將dailyData_id添加到daily_data_vehicles表中。這是一個多對多的關係,所以我想id key在關係表DailyDataVehicles,但我不太確定t.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"

+0

這就像只有在你的模式文件 – VenkatK

+0

所以t.references將解決模式方面?然後我必須相應地調整模型? –

+0

當然你必須。 – VenkatK

回答

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