Szukaj…


Gra ze stołami za pomocą konsoli szyn


Zobacz tabele

ActiveRecord::Base.connection.tables

Usuń dowolną tabelę .

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

Usuń indeks z istniejącej kolumny

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

gdzie country to nazwa kolumny w pliku migracji z już dodanym indeksem w tabeli users jak pokazano poniżej: -

 t.string :country,add_index: true

Usuń ograniczenie klucza obcego

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

gdzie menus has_many food_items i ich migracji.

Dodaj kolumnę

ActiveRecord::Migration.remove_column :table_name, :column_name

na przykład:-

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

Metody Railsowe - zwracanie wartości boolowskich

Każda metoda w modelu Rails może zwrócić wartość logiczną.

prosta metoda

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

Ponownie prosta metoda zwracająca wartość logiczną

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

Tak więc ta sama metoda zwróci teraz wartość logiczną zamiast czegokolwiek innego :).

Obsługa błędu - niezdefiniowana metoda `gdzie 'dla #

Czasami chcemy użyć zapytania where w kolekcji zwróconych rekordów, która nie jest ActiveRecord::Relation Dlatego otrzymujemy powyższy błąd, ponieważ klauzula Where jest znana dla ActiveRecord a nie dla Array .

Istnieje dokładne rozwiązanie tego problemu za pomocą Joins .

PRZYKŁAD : -

Załóżmy, że muszę znaleźć wszystkie profile użytkowników (UserProfile), które są aktywne, a nie użytkownik (Użytkownik) o id = 10.

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

Dlatego powyższe zapytanie nie powiedzie się po map ponieważ map zwróci array która nie będzie działać z klauzulą where .

Ale korzystanie z połączeń sprawi, że będzie działać,

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

Gdy joins wygenerują podobne rekordy, takie jak map ale będą to ActiveRecord a nie Array .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow