Saya memiliki tabel Produk dan ingin menambahkan kolom:
t.references :imageable, :polymorphic => true
Saya mencoba menghasilkan migrasi untuk ini dengan melakukan:
$ rails generate migration AddImageableToProducts imageable:references:polymorphic
tapi saya jelas melakukannya dengan salah. Adakah yang bisa memberi saran? Terima kasih
Ketika saya mencoba memasukkannya secara manual setelah melakukan migrasi, saya melakukannya seperti ini:
class AddImageableToProducts < ActiveRecord::Migration
def self.up
add_column :products, :imageable, :references, :polymorphic => true
end
def self.down
remove_column :products, :imageable
end
end
dan masih belum berhasil
Jawaban:
Sejauh yang saya tahu, tidak ada generator bawaan untuk asosiasi polimorfik. Hasilkan migrasi kosong dan kemudian ubah dengan tangan sesuai kebutuhan Anda.
Pembaruan : Anda harus menentukan tabel mana yang Anda ubah. Menurut jawaban SO ini :
sumber
schema.rb
harus diperbarui, tetapi tidak akan mengatakan apa-apapolymorphic
. Sebagai gantinya, Anda akan melihat bidang sebenarnya yang digunakan Rails ( Panduan Rails memiliki info selengkapnya).references
kolom? Apakah saya perlu mengindeksnya?imageable_type
dan / atauimageable_id
seperlunya.imageable_id
danimageable_type
bekerja. Terima kasih atas bantuan Anda.Apa yang Anda coba lakukan belum diimplementasikan dalam versi rel yang stabil jadi jawaban Michelle adalah yang tepat untuk saat ini. Tetapi fitur ini akan diimplementasikan di rails 4 dan sudah tersedia di versi edge sebagai berikut (menurut CHANGELOG ini ):
sumber
add_reference :products, :imageable, polymorphic: true, index: true
{polymorphic}
perlu melarikan diri dengan cangkang ikan, misalnya\{polymorphic\}
Anda juga bisa melakukan hal berikut:
sumber
Anda dapat mencoba
rails generate migration AddImageableToProducts imageable:references{polymorphic}
sumber
{
dan}
harus melarikan diri dengan setidaknya cangkang ikan, misalnya\{polymorphic\}