Ruby on Rails
Rails Cookbook - расширенные рецепты рельсов / методы обучения и кодирования
Поиск…
Игра с таблицами с использованием консоли 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 .