Rails Activerecord добавляет столбцы в несколько таблиц - PullRequest
0 голосов
/ 06 февраля 2020

Мне нужно выполнить миграцию, когда столбец добавляется в три отдельные таблицы. Столбец views является целым числом и должен также по умолчанию => 0. Как я могу добавить эти столбцы с помощью команд activerecord? Я использую postgreSQL базу данных.

Вот как должна выглядеть моя миграция:

class AddViewsToRestaurantsMenusDishes < ActiveRecord::Migration[6.0]
   def change
     add_column Restaurant, :views, :integer, :default => 0
     add_column Menu, :views, :integer, :default => 0
     add_column Dish, :views, :integer, :default => 0
   end
end

1 Ответ

2 голосов
/ 06 февраля 2020

add_column(table_name, column_name, type, **options)

class AddViewsToRestaurantsMenusDishes < ActiveRecord::Migration[6.0]
   def change
     add_column :restaurants, :views, :integer, default: 0
     add_column :menus, :views, :integer, default: 0
     add_column :dishes, :views, :integer, default: 0
   end
end

Ни один из методов в ActiveRecord::ConnectionAdapters::SchemaStatements или ActiveRecord::ConnectionAdapters::TableDefinition, составляющих целые миграции DSL, не принимает модели в качестве аргументов - все таблицы полностью.

Это предполагает, что ваши таблицы имеют условные имена. Если вы действительно хотите сделать то же самое из списка классов моделей, вы можете сделать:

class AddViewsToRestaurantsMenusDishes < ActiveRecord::Migration[6.0]
   def change
     [Restaurant, Menu, Dish].each do |model|
       add_column model.table_name, :views, :integer, default: 0
     end
   end
end

Но для миграций обычно хорошей идеей является KISS. Тем более, что они не должны оставаться на протяжении всего срока службы вашего проекта.

...