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 .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow