Ruby on Railsにおけるmigrate/migrationの用途

2635 ワード

本文はRuby on Rails入門チュートリアルを見た後、Migrateに疑問を持っている人に適しています.(例えば初心者の私は、Migrateが私にとって新しい概念だったので)
1.Migrateは何に使いますか.
データベースを操作するために使用されます.
2.なぜMigrationが必要なのですか?他の方法ではなく
まず、データベースを更新する古い方法を振り返ります.
テーブルを1枚追加するたびに、テーブルの構造を変更するたびに、次のようにします.
  • MySQLコマンドライン/phpMyadmin/SQLyogなどの他のSQLツール
  • SQL文を手書きで書いてこのことをします.(create table, create database, ...)

  • 古い方法の問題:
  • データベース操作は時間を知らない.たとえば、データベースを作成したり、テーブルにフィールドを追加したりすると、このフィールドがいつ追加されたかを調べることはできません.あなた自身やあなたのチームがわざわざ記録を書かない限り.X月X号にXXフィールドを追加します.理由:XX
  • 次の2つ目の問題を引き起こしました
  • チームメンバー間のデータベース同期.受注モジュールなどの新しい機能を実現するたびに、SQLテーブルをいくつか追加する必要があります.たとえばorderテーブルです.では、チームの他のメンバーがgitの上からpullを降りた後も、これらのSQL文を走って、同じテーブルを作成します.

  • 一般的には、クラウドコラボレーションやQグループなどの公共の場所を探して、走る新しいSQLコードを置いて、他の人は中にコピーして貼り付けて走って、自分の地元の開発環境のデータベースを同期します.その後、テストサーバにアップロード/本番サーバにアップロードするときは、SQL文をコピーして貼り付けます.かなり面倒です.
    Migrationを使ったら:
  • 問題:どのデータベース操作も時間解決方法を知らない:この問題はdb/migrate/のファイル名の時間を直接見ることで
  • がわかります.
  • 問題:チームメンバー間のデータベース同期解決方法:pullがコードを完了した後、rake db:migrateに直接接続すればいいです.仕事を終える.SQLコードを探してphpMyAdminに貼り付けて実行する必要はありません.1行のコードは、手作業で2分ほどで解決できることを解決しました.時間は大した問題ではありませんが、毎回そうするのは挫折感があり、こまごましたことだと思います.
    3.Migrateのメリットをまとめる:
  • 修正記録があります:いつデータベースを変更したか、何を変更したかを知っています
  • 複数のコラボレーションを容易にする:rake db:migrateコマンドによるデータベース構造の直接同期により、
  • のライフを大幅に節約
    4.Ruby on Rails,Migrate実例
    1たとえばusersテーブルにpasswordというフィールドを追加します.digest、このフィールドはユーザーのパスワードを保存するために使用されます.では、新しいmigrateを生成して(古いファイルを修正しないで、置いておけばいい)実行します.
    rails g migration add_password_digest_to_users password_digest:string
    

    ここでgはgenerate(生成)の略
    rails g migration [  ] [   ]:[  ], [   ]:[  ]
    

    ここの名前はadd_password_digest_to_usersフィールド名はpassword_digestタイプはstring
    下線という書き方はRails 4.2.4では時代遅れではありませんが、やはり役に立ちます.ネットのチュートリアルでは、rails g migration AddPartNumberToProductsという2つの方法を書くことができます.下線と頭文字の大文字はすべてできます.
    2最初のステップの後、db/migrateフォルダに1つ追加されます.
    20160419135445_add_password_digest_to_accounts.rb
    

    前の数字はタイムスタンプ(20160419135445)にすぎないことに注意してください.あなたが生成した肯定は私とは違います.このファイルを開けて、中の表に対する修正が正しいことを確認して、あなたのやりたいことに合っています.
    class AddPasswordDigestToAccounts < ActiveRecord::Migration
      def change
        add_column :accounts, :password_digest, :string
      end
    end
    

    この時点でデータベースのテーブルが本当に変更されていないことに注意してください.railsに何を変更したいかを教えているだけです.
    3有効にするには
    rake db:migrate 
    

    今、時計の構造が変わりました.あなたが望むならMySQLを開いて確認できます
    5.参考資料(補足歓迎)
    https://ihower.tw/rails4/migrations.html http://culttt.com/2015/10/07/understanding-ruby-on-rails-migrations/
    読んでくれてありがとうRailsについてもっと知ってくれて