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
.