我已经使用以下生成器命令为现有表创建了一个模型:
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所有列都是varchar或int,50:Fixnum类型从何而来?
谢谢
发布于 2010-07-17 11:15:50
最后,我犯了一个巨大的错误,或者更准确地说,我忽略了一个重要的细节!这是一个简单的列名冲突,我已经检查了它们的潜在问题,但遗漏了掩埋在其他26个列中的一个。这个恶意的列被命名为class,一旦AR在访问任何列后生成了它的魔术代码,它就会替换掉重要的类方法,而不会抛出任何错误。
我预计几乎不会有名称冲突,因为列名似乎都是用法语写的,所以没有花足够的时间,而且肯定读过"classe“或类似的东西。当心强大的名字冲突!
感谢ehsanul和dmajkic让我再次查看这些列的名称。
发布于 2010-07-17 10:55:31
您使用的是Mysql吗?Group是保留的sql关键字。看起来Rails 2.3.5+可以为mysql处理这个问题,但它可能会导致您在其他数据库或其他版本的Rails上看到的问题。
https://stackoverflow.com/questions/3269519
复制相似问题