Поиск…


Игра с таблицами с использованием консоли rails


Просмотр таблиц

ActiveRecord::Base.connection.tables

Удалите любую таблицу .

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

Удалить индекс из существующего столбца

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

где country - это имя столбца в файле миграции с уже добавленным индексом в таблице users как показано ниже: -

 t.string :country,add_index: true

Удалить ограничение внешнего ключа

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

где menus has_many food_items и их соответствующие миграции тоже.

Добавить столбец

ActiveRecord::Migration.remove_column :table_name, :column_name

например:-

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

Методы Rails - возврат логических значений

Любой метод в модели Rails может возвращать логическое значение.

простой метод-

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

Снова простой метод, возвращающий логическое значение -

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

Таким образом, тот же метод теперь будет возвращать boolean вместо всего остального :).

Обработка ошибки - неопределенный метод `где 'для #

Иногда мы хотим использовать запрос where на коллекцию возвращенных записей, которая не является ActiveRecord::Relation .Hence мы получаем указанную выше ошибку, поскольку предложение Where известно в ActiveRecord а не в Array .

Для этого есть точное решение с помощью Joins .

ПРИМЕР : -

Предположим, мне нужно найти все профили пользователей (UserProfile), которые являются активными, которые не являются пользователем (пользователем) с id = 10.

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

Таким образом, над запросом будет отказано после map как map вернет array который не будет работать с предложением where .

Но с помощью объединений он будет работать,

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

Поскольку joins будут выводить похожие записи, такие как map но они будут ActiveRecord а не Array .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow