如何在具有名为“valid”的列的数据库上使用ActiveRecord? (DangerousAttributeError)
我正在访问一个我无法更改的数据库,它有一个名为valid defined的列。 无论何时我尝试访问属性,我都会遇到以下exception:
有效? 由ActiveRecord定义(ActiveRecord :: DangerousAttributeError)
exception是有道理的,但由于我无法更改数据库,如何解决此错误?
我尝试“覆盖”该属性,但我不知道如何删除原始列。 我可以成功调用这个valid_column方法,但是每当我尝试访问数据库中定义的另一个属性时,我都会得到相同的exception。 它似乎仍在尝试映射有效列。
def valid_column=(valid) write_attribute(:valid, valid) end def valid_column read_attribute(:valid) end
我不确定这是否重要,但这里是我的环境的详细信息:
- Windows Ruby 1.8.6
- Linux服务器上的Informix数据库
- activerecord(2.3.4)
- activerecord-informix-adapter(1.0.0.9250)
- ruby-informix(0.7.1)
提前致谢!
试试这个:
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中工作,但它现在可以解决问题。
我在ruby on rails邮件列表上找到了它
如果你愿意,你也可以看一下datamapper ,它可以更加理智地处理这些事情。
使用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
对于读取,您可以使用SQL的select-as语句。 不确定以下内容是否有效,但默认范围可能会使此操作变得容易。
class MyRecord < ActiveRecord::Base default_scope :select=> 'valid as valid_column' end