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 .