我正在访问一个我无法更改的数据库,并且它定义了一个名为 valid 的列。无论何时我尝试访问属性,我都会遇到此异常:
有效?由ActiveRecord定义 (ActiveRecord的:: DangerousAttributeError)
异常是有道理的,但由于我无法更改数据库,如何解决此错误?
我尝试“覆盖”该属性,但我不知道如何删除原始列。我可以成功调用这个valid_column方法,但是每当我尝试访问数据库中定义的另一个属性时,我都会得到相同的异常。它似乎仍在尝试映射有效列。
def valid_column=(valid)
write_attribute(:valid, valid)
end
def valid_column
read_attribute(:valid)
end
我不确定这是否重要,但以下是我的环境的详细信息:
提前致谢!
答案 0 :(得分:11)
试试这个:
class MyTable < AR:Base
class << self
def instance_method_already_implemented?(method_name)
return true if method_name == 'valid'
super
end
end
end
这是一个黑客攻击,它可能无法在rails 3中运行,但它现在可以解决问题。
上找到了它如果你愿意,你也可以看看datamapper,它可以更加理智地处理这些事情。
答案 1 :(得分:4)
使用safe_attributes - https://github.com/bjones/safe_attributes。它完美地开箱即用:
class WebsiteUser < ActiveRecord::Base
establish_connection 'cf_website'
set_table_name 'nc_users'
bad_attribute_names :hash
end
答案 2 :(得分:3)
答案 3 :(得分:2)
对于读取,您可以使用SQL的select-as语句。不确定以下内容是否有效,但默认范围可能会使此操作变得容易。
class MyRecord < ActiveRecord::Base
default_scope :select=> 'valid as valid_column'
end