Ricerca…


Giocare con le tabelle usando la console di rails


Visualizza tabelle

ActiveRecord::Base.connection.tables

Elimina qualsiasi tabella .

    ActiveRecord::Base.connection.drop_table("users")
    ------------OR----------------------
    ActiveRecord::Migration.drop_table(:users)
    ------------OR---------------------
    ActiveRecord::Base.connection.execute("drop table users")

Rimuovi l'indice dalla colonna esistente

 ActiveRecord::Migration.remove_index(:users, :name => 'index_users_on_country')

dove country è un nome di colonna nel file di migrazione con indice già aggiunto nella tabella users come mostrato di seguito: -

 t.string :country,add_index: true

Rimuovi il vincolo della chiave esterna

ActiveRecord::Base.connection.remove_foreign_key('food_items', 'menus')

dove menus has_many food_items e le loro rispettive migrazioni.

Aggiungi colonna

ActiveRecord::Migration.remove_column :table_name, :column_name

per esempio:-

 ActiveRecord::Migration.add_column :profiles, :profile_likes, :integer, :default => 0

Metodi di Rails - Restituzione di valori booleani

Qualsiasi metodo nel modello Rails può restituire il valore booleano.

metodo semplice-

  ##this method return ActiveRecord::Relation
  def check_if_user_profile_is_complete
    User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
  end

Ancora un metodo semplice che restituisce il valore booleano-

  ##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

Quindi, lo stesso metodo ora restituirà booleano invece di qualsiasi altra cosa :).

Gestione dell'errore - metodo non definito `dove 'per #

A volte vogliamo utilizzare una query where su una raccolta di record restituita che non sia ActiveRecord::Relation Quindi otteniamo l'errore sopra riportato come clausola Where è nota a ActiveRecord e non a Array .

C'è una soluzione precisa per questo usando Joins .

ESEMPIO : -

Supponiamo di dover trovare tutti i profili utente (UserProfile) che sono attivi e che non è un utente (utente) con un id = 10.

UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).map(&:user).where.not(:id=>10)

Così sopra interrogazione fallirà dopo map come map restituisce un array che non funziona con where clausola.

Ma usando i join, lo farà funzionare,

UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).joins(:user).where.not(:id=>10)

Poiché i joins genereranno record simili come map ma saranno ActiveRecord e non una Array .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow