我有一个情况。我有一个旧系统,我们正在将代码替换为 Rails。所以,表格是合同的,在旧系统中它有大约 20 个字段,但在这个内置于 rails 的新软件中,我将只使用 5 个字段,一段时间后我们将删除所有其他字段。
默认情况下,rails 映射表思想 orm 的所有行。我该如何选择我想在 ActiveRecord 下映射的字段?
谢谢
我有一个情况。我有一个旧系统,我们正在将代码替换为 Rails。所以,表格是合同的,在旧系统中它有大约 20 个字段,但在这个内置于 rails 的新软件中,我将只使用 5 个字段,一段时间后我们将删除所有其他字段。
默认情况下,rails 映射表思想 orm 的所有行。我该如何选择我想在 ActiveRecord 下映射的字段?
谢谢
ActiveRecord 将字段动态映射到 Ruby 方法,因此您实际上不需要排除它们,只是不要使用它们,当您删除它们时,您不会破坏任何东西。
在我没有创建的数据库上使用 Rails 之外的 ActiveRecord 时,我使用了(hacky)解决方案。基本上,我深入研究了 ActiveRecord 代码,发现它利用类方法 ::column_names 来促进字段的映射。正如其他人所指出的那样,只需不使用您打算从数据库中删除的模型中的字段就可以了。但也有可能是 Db 的结构使用了一个不能与 ActiveRecord 配合使用的保留字。我添加了以下代码来隐藏 ActiveRecord 中的“类”字段,因为“类”是保留名称并且会引发各种错误。
private
def self.column_names
orig = super
orig.delete('class')
return orig
end
您当然可以修改它以从返回的数组中删除多个键,例如:
private
def self.column_names
orig = super
['class', 'field_one', 'field_two'].each do |field_name|
orig.delete(field_name)
end
return orig
end
希望这会有所帮助,/salernost