我试图通过覆盖mysql的活动记录连接适配器来将活动记录列名称设置为大写。但我肯定做错了什么并且出现missing attribute
错误。
我必须这样做,因为我们有一个复杂的设置,我们在oracle和MySQL之间切换,两个数据库都使用大写表名和列名。
这就是我尝试的方式,但它似乎无法运作
module ActiveRecord::ConnectionAdapters
class Column
def name
@name.downcase
end
end
end
有人可以在这里提出错误。
答案 0 :(得分:1)
我不会在ActiveRecord类中自行完成它,你可能最终会在自己的rails中打破很多内置函数。
另外你应该明白,在自己的类中调用类的属性会导致无限递归调用并最终出现错误
class Something < ActiveRecord::Base
def name
name.downcase # this is bad
end
end
相反,您应该使用函数read_attribute
class Something < ActiveRecord::Base
def name
read_attribute(name).downcase # this will work safely
end
end
如果你想保持你的代码干净并且不在每个地方重复同样的事情,你可以将它提取到concern
并将其包含在你想要使用它的类中。
module DownCaseName
extend ActiveSupport::Concern
def name
read_attribute(name).downcase
end
end
class Something < ActiveRecord::Base
incude DownCaseName
end