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')

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 .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow