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 .