Ruby on Rails
Rails Cookbook - Advanced rails recettes / apprentissages et techniques de codage
Recherche…
Jouer avec des tables en utilisant la console de rails
Voir les tableaux
ActiveRecord::Base.connection.tables
Supprimer n'importe quelle table .
ActiveRecord::Base.connection.drop_table("users")
------------OR----------------------
ActiveRecord::Migration.drop_table(:users)
------------OR---------------------
ActiveRecord::Base.connection.execute("drop table users")
Supprimer l'index de la colonne existante
ActiveRecord::Migration.remove_index(:users, :name => 'index_users_on_country')
où country
est un nom de colonne dans le fichier de migration avec l'index déjà ajouté dans la table users
, comme indiqué ci-dessous: -
t.string :country,add_index: true
Supprimer la contrainte de clé étrangère
ActiveRecord::Base.connection.remove_foreign_key('food_items', 'menus')
où les menus has_many food_items
et leurs migrations respectives.
Ajouter une colonne
ActiveRecord::Migration.remove_column :table_name, :column_name
par exemple:-
ActiveRecord::Migration.add_column :profiles, :profile_likes, :integer, :default => 0
Méthodes Rails - retour des valeurs booléennes
Toute méthode dans le modèle Rails peut renvoyer une valeur booléenne.
méthode simple-
##this method return ActiveRecord::Relation
def check_if_user_profile_is_complete
User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
end
Encore une fois, la méthode simple retourne la valeur booléenne-
##this method return Boolean(NOTE THE !! signs before result)
def check_if_user_profile_is_complete
!!User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
end
Donc, la même méthode va maintenant retourner booléen au lieu de tout autre chose :).
Manipulation de l'erreur - méthode indéfinie `where 'pour #
Parfois, nous voulons utiliser une requête where
sur une collection d'enregistrements renvoyée, qui n'est pas ActiveRecord::Relation
conséquent, nous obtenons l'erreur ci-dessus en tant que clause Where
est connue de ActiveRecord
et non de Array
.
Il existe une solution précise en utilisant les Joins
.
EXEMPLE : -
Supposons que je doive trouver tous les profils d’utilisateur (UserProfile) qui ne sont pas un utilisateur (User) avec un identifiant = 10.
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).map(&:user).where.not(:id=>10)
Donc, la requête ci-dessus échouera après la map
car la map
retournera un array
qui ne fonctionnera pas avec la clause where
.
Mais en utilisant des jointures, cela fonctionnera,
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).joins(:user).where.not(:id=>10)
Comme les joins
produiront des enregistrements similaires à la map
elles seront ActiveRecord
et non un Array
.