Я понимаю, что лучше всего определять модели в процессе миграции, если вы управляете данными модели во время миграции. Однако, когда я пытаюсь построить другую с полиморфной ассоциацией, атрибут polymorphic_type получает имена, перенесенные моделью, в перенос, в котором я объявлял его, приводя к тому, что результирующий набор данных не был действительно связан.Как безопасно использовать полиморфную модель в миграции Rails?
В принципе, в конечном итоге у меня есть адреса, для которых addressable_type установлен как «RemoveAddressColumnsFromEmployeesTable :: Employee» вместо «Employee».
Я могу исправить это, явно установив addressable_type и addressable_id, но это единственный способ справиться с этой инкапсуляцией?
class RemoveAddressColumnsFromEmployeesTable < ActiveRecord::Migration
class Employee < ActiveRecord::Base
has_one :address, :as => :addressable, :inverse_of => :addressable
end
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true, :inverse_of => :address
end
def up
Employee.all.each do |e|
address = e.build_address
address.street_address = e.street_address
address.apt_num = e.apt_num
address.city = e.city
address.state = e.state
address.zip = e.zip
e.save
end
remove_column :employees, :street_address
remove_column :employees, :apt_num
remove_column :employees, :city
remove_column :employees, :state
remove_column :employees, :zip
end
def down
add_column :employees, :street_address, :string
add_column :employees, :apt_num, :string
add_column :employees, :city, :string
add_column :employees, :state, :string
add_column :employees, :zip, :string
Employee.all.each do |e|
e.street_address = e.address.street_address
e.apt_num = e.address.apt_num
e.city = e.address.city
e.state = e.address.state
e.zip = e.address.zip
e.address = nil
e.save
end
end
end
Об этом было задано довольно давно. Вы когда-нибудь выяснили лучший способ? Я хочу опубликовать тот же вопрос, но если да, то он будет отмечен как ваш дубликат. – Trejkaz
Кто-нибудь нашел решение по этой проблеме? – MikDiet