我把我的 Rails 数据库弄乱了,当时有点迷茫。当我意识到我的一个表名不像其他表名那样以 ' 结尾时,一切都开始了。(我真的不知道为什么,因为我所有的其他表都以's'为前缀)所以我尝试重命名它并进行了迁移:
rename_table :funnel_data, :funnel_datas
有关信息,相应的模型称为FunnelData
:
class FunnelData < ActiveRecord::Base
...
end
所以迁移似乎完成了它的工作,并且没有错误地运行。
但是现在,在控制台中,我得到了以下信息:
2.0.0-p247 :014 > FunnelData
=> FunnelData(Table doesn't exist)
我检查了我的数据库,并且该表funnel_datas
确实存在!
所以它引出了我的问题:Rails 应该如何知道表的“新”名称?我该如何解决我的情况?谢谢。
更新:好的,既然我知道“数据”是“数据”的复数形式,我回滚了我的迁移,并试图走自己的路,但现在我得到了一个奇怪的行为。
首先,让我们引入另一个类:
class FunnelStage < ActiveRecord::Base
has_many :funnel_data
(...)
end
我的控制台说:
2.0.0-p247 :046 > f = FunnelStage.first
FunnelStage Load (0.3ms) SELECT `funnel_stages`.* FROM `funnel_stages` ORDER BY `funnel_stages`.`id` ASC LIMIT 1
=> #<FunnelStage id: 1, name: "Inquiries", order: 100, created_at: "2013-09-14 23:08:55", updated_at: "2013-09-14 23:08:55">
2.0.0-p247 :047 > f.funnel_dat
f.funnel_data f.funnel_data= f.funnel_datum_ids f.funnel_datum_ids=
2.0.0-p247 :047 > f.funnel_data
NameError: uninitialized constant FunnelStage::FunnelDatum
from /usr/local/rvm/gems/ruby-2.0.0-p247@rails4test/gems/activerecord-4.0.0/lib/active_record/inheritance.rb:125:in `compute_type'
from /usr/local/rvm/gems/ruby-2.0.0-p247@rails4test/gems/activerecord-4.0.0/lib/active_record/reflection.rb:178:in `klass'
(...)
from bin/rails:4:in `<main>'
2.0.0-p247 :048 > f.funnel_datum_ids
NameError: uninitialized constant FunnelStage::FunnelDatum
from /usr/local/rvm/gems/ruby-2.0.0-p247@rails4test/gems/activerecord-4.0.0/lib/active_record/inheritance.rb:125:in `compute_type'
from /usr/local/rvm/gems/ruby-2.0.0-p247@rails4test/gems/activerecord-4.0.0/lib/active_record/reflection.rb:178:in `klass'
(...)
from bin/rails:4:in `<main>'
所以现在,Rails 说的是拉丁语?(数据/数据...)
编辑并回答:好的,我自己想出来的。Rails 很难理解这种关联,因为它试图将“funnel_data”单数化为一个全新的“funnel_datum”名称(顺便说一句,这将是正确的)
所以我不得不写:
class FunnelStage < ActiveRecord::Base
has_many :funnel_data, class_name: "FunnelData"
(...)
end
让它工作。
非常感谢所有帮助我理解这一点的人......