Ami*_*tel 6 migration legacy-code single-table-inheritance ruby-on-rails-3 ruby-on-rails-2
在处理Rails 2.3.18到Rails 3.2.x迁移时,我在type列中面临名称问题
这是定义的关系.
app/models/reservation.rb
class Reservation
end
class Reservation::Guest < Reservation
end
class Reservation::Event < Reservation
end
Run Code Online (Sandbox Code Playgroud)
在保存Reservation::Guest或Reservation::Event实例时,type保存的值是Reservation::Guest和Reservation::EventRails 3中的.但是在Rails 2中,它保存没有名称空间即,Guest或Event.
它需要付出很多努力来迁移现有数据并更改所有type不需要命名空间的地方.
如果type不在命名空间中进行大量修改,是否可以在没有命名空间和休息的情况下进行保存?
moh*_*a27 22
看看sti_name和find_sti_class.(负责设置和获取sti_name的方法)
您可以按如下方式自定义它们:
class Reservation
def self.find_sti_class(type_name)
type_name = self.name
super
end
end
class Reservation::Guest < Reservation
def self.sti_name
"Guest"
end
end
class Reservation::Event < Reservation
def self.sti_name
"Event"
end
end
Run Code Online (Sandbox Code Playgroud)
Ext*_*tor 12
我知道这是一个老问题,但也许有人会使用它.
扩展mohameddiaa27的答案,摆脱命名空间的最简单方法是声明store_full_sti_class,因为它被使用了sti_name.
class Reservation
# don't include namespace in type column
def self.store_full_sti_class
false
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |