db / schema.rb
pour correspondre à la dernière structure de la base de données.db / migrate
.AAAAMMJJHHMMSS_create_products.rb
, et la date et l'heure identifieront la migration. Le nom de la migration est décrit après le trait de soulignement.20080906120001_add_details_to_products.rb
, une classe appelée ʻAddDetailsToProducts` doit être définie.--Lors de l'ajout d'une colonne
Générez en ajoutant ʻadd_columnau format "AddColumnToTable". <br> --Lors de la suppression d'une colonne <br> Générez en ajoutant
remove_column` au format" RemoveColumnFromTable ".
Exemple: lors de l'ajout d'une colonne e-mail à la table Utilisateurs
$ rails g migration AddEmailToUsers email:string
Exemple: lors de la suppression d'une colonne hobby de la table Users
$ rails g migration RemoveHobbyFromUsers hobby:string
Lorsque la commande de génération de migration ci-dessus est exécutée, le fichier de migration suivant est généré.
Lors de l'ajout d'une colonne
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :email, :string
end
end
Lors de la suppression d'une colonne
class RemoveHobbyFromUsers < ActiveRecord::Migration[5.0]
def change
remove_column :users, :hobby, :string
end
end
$ rails g migration CreatePosts name:string content:text
Faire ce qui précède générera:
Lors de la création d'une table
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :posts do |t|
t.string :name
t.text :content
t.timestamps
end
end
end
Le contenu généré jusqu'à présent n'est qu'un point de départ,
Vous pouvez générer db / migrate / YYYYMMDDHHMMSS_add_genre_to_posts.rb
et ajouter / supprimer des colonnes à la table.
Vous pouvez spécifier des références comme type de colonne.
$ rails g migration AddUserRefToPosts user:references
L'exécution de ce qui précède générera:
class AddUserRefToPosts < ActiveRecord::Migration[5.0]
def change
add_reference :posts, :user, foreign_key: true
end
end
L'exécution de cette migration crée un ʻuser_id` dans la table posts et ajoute l'index approprié.
La migration pour générer une table de jointure est également possible si "JoinTable" fait partie du nom.
$ rails g migration CreateJoinTableUserPost user post
L'exécution de ce qui précède générera:
class CreateJoinTableUserPost < ActiveRecord::Migration[5.0]
def change
create_join_table :users, :posts do |t|
# t.index [:user_id, :post_id]
# t.index [:post_id, :user_id]
end
end
end
join tables
)Générez une table de jointure lors de l'utilisation. La table de jointure stocke des «id: key» tels que «primaire» et «clé étrangère».
#app/models/user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :posts
end
#app/models/post.rb
class Post < ActiveRecord::Base
has_and_belongs_to_many :users
end
@user.posts #-> all posts from join table
@post.users #-> all users from join table
Autrement dit, si vous devez associer has_many <-> has_many, vous avez besoin d'une table de jointure pour stocker toutes les références aux clés externes relatives.
Lors de la migration lors de la création d'un nouveau modèle, si vous spécifiez les colonnes requises, ces colonnes supplémentaires seront générées en même temps.
Générer un modèle utilisateur
$ rails g model User name:string description:text
L'exécution de ce qui précède générera:
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
[Modificateur de colonne](https://railsguides.jp/active_record_migrations.html#%E3%82%AB%E3%83%A9%E3%83%A0%E4%BF%AE%E9%A3%BE%E5 Vous pouvez également passer% AD% 90) directement sur la ligne de commande. Les types de champs (type de données, type d'association) peuvent être ajoutés depuis l'arrière en utilisant la parenthèse ondulée {}
.
$ rails g migration AddDetailsToProducts 'price:decimal{5,2}' supplier:references{polymorphic}
Cela générera une migration similaire à la suivante:
class AddDetailsToProducts < ActiveRecord::Migration[5.0]
def change
add_column :products, :price, :decimal, precision: 5, scale: 2
add_reference :products, :supplier, polymorphic: true
end
end
La méthode create_table
est la méthode la plus basique et est utilisée lors de la création d'un modèle.
create_table :posts do |t|
t.string :name
end
Ce qui précède crée une table posts
et y crée une colonne appelée nom
.
Si vous ne voulez pas utiliser la clé primaire, vous pouvez spécifier l'option ʻid: false`, et si vous voulez que les options soient utilisées par une base de données particulière, vous pouvez écrire le fragment SQL comme suit après l'option: options.
create_table :products, options: "ENGINE=BLACKHOLE" do |t|
t.string :name, null: false
end
Dans la migration ci-dessus, ENGINE = BLACKHOLE est spécifié dans l'instruction SQL qui génère la table.
Vous pouvez également utiliser l'option : comment
pour écrire une description de la table et la sauvegarder dans la base de données elle-même.
Il est recommandé d'ajouter de tels commentaires à la migration car cela rendra le modèle de données plus facile à comprendre et générera également de la documentation pour les grandes applications.
La méthode create_join_table
de la migration crée une jointure de table has_and_belongs_to_many (HABTM).
create_join_table :posts, :categories
Ce qui précède crée la table categories_products
, dans laquelle les colonnes category_id
et post_id
sont créées. Ces colonnes ont une option: null et la valeur par défaut est false. Vous pouvez remplacer la valeur par défaut en spécifiant l'option : column_options
.
create_join_table :posts, :categories, column_options: { null: true }
Si vous souhaitez utiliser votre propre nom de table, vous pouvez le spécifier avec: nom_table.
create_join_table :posts, :categories, table_name: :categorization
La table de catégorisation est créée en procédant comme ci-dessus.
create_join_table
peut également prendre un bloc comme argument. Ceci est utilisé pour ajouter des index et des colonnes.
create_join_table :posts, :categories do |t|
t.index :post_id
t.index :category_id
end
Modifier une table existantechange_table
La méthode estcreate_table
Il est très similaire et peut être utilisé de la même manière. Céder au bloc (du bloc|t|
L'objet (qui remplace) peut être utilisé dans le style d'écriture suivant.
change_table :posts do |t|
t.remove :description, :name
t.string :part_number
t.index :part_number
t.rename :upccode, :upc_code
end
La migration ci-dessus supprime les colonnes description
et name
, crée une colonne string
part_number, y ajoute un index et renomme finalement la colonne ʻupccode
.
Lors de la migration, vous pouvez utiliser la méthode change_column
en plus de remove_column
et ʻadd_column`.
change_column :products, :part_number, :text
Recommended Posts