我使用以下生成器命令为现有表创建了一个模型:
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
类型来自何处?
由于
答案 0 :(得分:0)
你在使用Mysql吗? Group是一个保留的sql关键字。看起来Rails 2.3.5+为mysql处理这个问题,但它可能导致你在其他数据库或其他版本的Rails上看到的问题。
答案 1 :(得分:0)
最后,我犯了一个大错,或者更确切地说是忽略了一个重要的细节!这是一个简单的专栏名称冲突,我已经审查了他们的潜在问题,但错过了一个埋在其他26个。该恶意列被命名为class
,一旦AR在访问任何列后生成它的魔法代码,它就会替换重要的类方法而不会抛出任何错误。
我预计很少有名字发生冲突,因为列名似乎都是用法语写的,所以没有花足够的时间,必须阅读“classe”或类似的东西。当心强大的名字冲突!
感谢ehsanul和dmajkic让我第二次查看这些列名。