在现有表上使用ActiveRecord模型的问题

时间:2010-07-16 23:37:49

标签: ruby-on-rails activerecord model

我使用以下生成器命令为现有表创建了一个模型:

script/generate model Group

有问题的表格有不同的名称,因此我更改了模型以解释它。

set_table_name 'demandegroupe'

然后我启动了控制台,看看是否一切正常。

>> Group.all
[#<Group login: "XXXXXX", ...>, ...]

但令我惊讶的是,在视图中使用此模型会抛出奇怪的错误。我回到控制台,以确保我没有产生幻觉,这就是发生的事情:

>> Group.first
#<Group login: "XXXXXX", ...>
>> Group.first.login
NoMethodError: undefined method `generated_methods' for 50:Fixnum
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/attribute_methods.rb:247:in `method_missing'
        from (irb):2

之后,第一个表达式不再起作用了:

>> Group.first
NoMethodError: undefined method `column_names' for 50:Fixnum

所有列都是varcharint50:Fixnum类型来自何处?

由于

2 个答案:

答案 0 :(得分:0)

你在使用Mysql吗? Group是一个保留的sql关键字。看起来Rails 2.3.5+为mysql处理这个问题,但它可能导致你在其他数据库或其他版本的Rails上看到的问题。

答案 1 :(得分:0)

最后,我犯了一个大错,或者更确切地说是忽略了一个重要的细节!这是一个简单的专栏名称冲突,我已经审查了他们的潜在问题,但错过了一个埋在其他26个。该恶意列被命名为class,一旦AR在访问任何列后生成它的魔法代码,它就会替换重要的类方法而不会抛出任何错误。

我预计很少有名字发生冲突,因为列名似乎都是用法语写的,所以没有花足够的时间,必须阅读“classe”或类似的东西。当心强大的名字冲突!

感谢ehsanul和dmajkic让我第二次查看这些列名。