Ruby on Rails
Rails Cookbook - Avancerade railsrecept / lärande och kodningstekniker
Sök…
Spela med tabeller med hjälp av rälskonsolen
Visa tabeller
ActiveRecord::Base.connection.tables
Ta bort valfri tabell .
ActiveRecord::Base.connection.drop_table("users")
------------OR----------------------
ActiveRecord::Migration.drop_table(:users)
------------OR---------------------
ActiveRecord::Base.connection.execute("drop table users")
Ta bort index från befintlig kolumn
ActiveRecord::Migration.remove_index(:users, :name => 'index_users_on_country')
där country
är ett kolumnnamn i migreringsfilen med redan lagt till index i users
som visas nedan: -
t.string :country,add_index: true
Ta bort främmande nyckelbegränsningar
ActiveRecord::Base.connection.remove_foreign_key('food_items', 'menus')
där menus has_many food_items
och deras respektive migrering också.
Lägg till kolumn
ActiveRecord::Migration.remove_column :table_name, :column_name
till exempel:-
ActiveRecord::Migration.add_column :profiles, :profile_likes, :integer, :default => 0
Rails metoder - returnera booleska värden
Alla metoder i Rails-modellen kan returnera booleskt värde.
enkel metod-
##this method return ActiveRecord::Relation
def check_if_user_profile_is_complete
User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
end
Återigen enkel metod som returnerar booleskt värde-
##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
Så samma metod kommer nu att returnera boolean istället för något annat :).
Hantera felet - odefinierad metod `var 'för #
Ibland vill vi använda en where
fråga på aa samling poster åter som inte ActiveRecord::Relation
.Hence vi får ovanstående fel som Where
klausul vet ActiveRecord
och inte Array
.
Det finns en exakt lösning för detta genom att använda Joins
.
EXEMPEL : -
Anta att jag måste hitta alla användarprofiler (UserProfile) som är aktiva som inte är en användare (User) med en id = 10.
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).map(&:user).where.not(:id=>10)
Så ovanför frågan kommer att misslyckas efter map
eftersom map
kommer att returnera en array
som inte fungerar med where
klausul.
Men om du använder skarvar kommer det att fungera,
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).joins(:user).where.not(:id=>10)
Eftersom joins
kommer att producera liknande poster som map
men de kommer att vara ActiveRecord
och inte en Array
.