Langkau ke kandungan utama

Ruby on Rails: Tambah kolum dan tambah data untuk kolum tersebut dalam satu fail migrasi

Assalamualaikum

apabila kita isytiharkan satu migrasi(migration) untuk mengubah jadual(table) di pangkalan data(db), maka perlu diingat, selepas migrasi menambah medan(column) baru pada jadual, sistem dalam proses bekalang masih lagi menyimpan maklumat jadual sebelum ditambah medan. Oleh itu kita perlu kemaskini proses latar belakang dengan arahan :


Model.reset_column_information

sebagai contoh, katakan kita ada jadual customers, dan movies yang masing-masing menyimpan data pelanggan dan filem. Kita juga ada satu lagi jadual rented_movies yang akan menyimpan makluman pinjaman filem oleh pelanggan.

Kita ingin menambah id filem ke dalam jadual rented_movies ini untuk rujukan kepada jadual movies yang akan menunjukkan pelanggan telah meminjam filem yang mana satu.


 class AddMovieIdToRentedMovie < ActiveRecord::Migration
  def self.up
      add_column :rented_movies, :movie_id, :integer, after: :user_id,  index: true, null: false
      begin
        RentedMovie.reset_column_information
        Rake::Task['db:seed:movie_id_on_rented_movie'].invoke
      rescue Exception=>e
        remove_column :rented_movies, :movie_id
        raise "error #{e}"
    end
  end

  def self.down
    remove_column :rented_movies, :movie_id
  end
end


Dalam contoh ini, aku dah siapkan skrip untuk seed jadual dalam satu rake:task dan aku hanya perlu memanggil task tersebut dari sini.

arahan ini akan menjadikan proses belakang mengemaskini maklumat jadual rented_movies dengan sebarang perubahan yang telah berlaku dan seterusnya membolehkan seed berjaya dilakukan menggunakan medan yang baharu ditambah.

RentedMovie.reset_column_information

Catatan popular daripada blog ini

Apa Maksud RON dalam pengkelasan Petrol?

RON dan Petrol Oleh yusdirman, Oktober 2014 RON adalah singkatan daripada Research Octane Number Ianya kaedah penarafan bahan api. Lebih tinggi nilai RON, lebih mahal harga PETROL. Adakah minyak RON 97 lebih berkuasa berbanding RON 95? RON merujuk kepada tahap bahan api menahan rintangan "ketukan" semasa proses pembakaran oleh palam pencucuh dalam enjin. Ianya merujuk kepada tahap ketahanan bahan api untuk tidak terbakar sebelum dinyalakan oleh palam pencucuh dalam enjin. "ketukan" dalam konteks RON ini adalah apabila campuran bahan api dan udara dalam enjin terbakar lebih awal sebelum api dari palam pencucuh menbakarnya. Pembakaran awal ini mungkin disebabkan enjin terlalu panas. Haba dari silinder enjin itu sendiri mungkin telah menyalakan bahan api sebelum palam pencucuh menyala. Ini boleh menurunkan prestasi dan mungkin boleh memudaratkan enjin! Jadi, RON bukannya bermaksud LEBIH KUASA! Ianya bermaksud bahan api itu dapat menahan tekanan dari...

Rokok Elektronik : Bahaya Untuk Kesihatan atau Membantu Perokok Berhenti Merokok?

Rokok Elektronik, e-rokok -- oleh Ahmad Yusdirman Rokok elektronik adalah nama panggilan kepada alat yang membekalkan dos nikotin dalam bentuk wap dengan memanaskan cecair campuran propylene glycol, glycerol, perasa makanan dan nikotin menjadikannya berbentuk wap dan disedut oleh pengguna. Alat ini memberikan perokok yang ingin berhenti merokok masih mendapatkan dos nikotin dan masih lagi dapat menikmati aktiviti merokok kerana wap yang dikeluarkan adalah kelihatan seumpama asap rokok. Terdapat beberapa nama panggilan untuk rokok elektronik ini termasuklah eRokok, vapor dan ecig. Namun, oleh kerana panggilan rokok elektronik masih menggunakan perkataan 'rokok', ianya masih lagi memberikan stigma kepada masyarakat yang tidak tahu mengenainya. Panggilan 'vapor' yang bermaksud 'wap' adalah lebih ringan diterima masyarakat. Sejarah Rokok elektronik pertama sekali diperkenalkan oleh Herbert A. Gilbert pada tahun 1963[1] namun tidak dikomersilkan dan k...

Server Redundancy - Pertindanan Komputer Pelayan

alkisahnya tercari-cari untuk buat server redundancy ( pertindihan komputer pelayan ) atas sebab perlunya server yang sentiasa on-line tanpa ada downtime yang lama. Dan, cabarannya adalah memang kami tak pernah jalani apa-apa latihan, pengalaman dan apa jua pengetahuan berkenaan teknologi ini. Yang pastinya, perlu banyak mengoogle. Setakat ini, ada banyak kaedah untuk memastikan aplikasi masih terus boleh berfungsi walaupun server mati/rosak. 1. guna 2 server yang sama. Bila satu mati, satu lagi yang masih hidup dapat terus melayan pengguna. 2. guna 2 talian rangkaian yang berbeza. Bila satu talian rosak/putus, masih ada satu lagi talian rangkaian yang berfungsi. 3. storan di server guna raid ( redundant array of independent disk ) atau dalam bahasa melayu : barisan disk berlainan yang bertindan. Raid dapat menjadikan sebilangan hd menjadi 1 dengan semua data pada 1 hd adalah sama dengan data pada hd 2. (mirroring) 4. satu IP maya untuk sebilangan server. 2 server yang mena...