Ruby on Rails
Rails Cookbook - Advanced Rails: ricette / apprendimento e tecniche di codifica
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
.