模型尝试在生产中使用与开发中不同的表名

时间:2011-02-24 02:51:33

标签: ruby-on-rails ruby-on-rails-3

我有一个名为User的模型。我将pluralize_table_names设置为false,因此表User使用的是user。 (那真是一口!)

有趣的是,我的模型在开发中表现正确,但在生产中User尝试使用一个名为users的表,该表不存在。我所有的其他模型都使用它们的单个表名。看看这个:

$ rails console
Loading development environment (Rails 3.0.3)
irb(main):001:0> Client.table_name
=> "client"
irb(main):002:0> Appointment.table_name
=> "appointment"
irb(main):003:0> User.table_name
=> "user"
irb(main):004:0> 
$ rails console production
Loading production environment (Rails 3.0.3)
irb(main):001:0> Client.table_name
=> "client"
irb(main):002:0> Appointment.table_name
=> "appointment"
irb(main):003:0> User.table_name
=> "users"
irb(main):004:0>

正如你所看到的,除了生产中的User之外,一切都很好。是什么给了什么?

编辑:这是生产中的模型代码:

class User < ActiveRecord::Base
  acts_as_authentic
end

在开发中:

class User < ActiveRecord::Base
  acts_as_authentic
end

同样的事情。我甚至将生产实例指向与开发相同的数据库,问题仍然存在。当我开始使用Authlogic时,我开始遇到这些问题,所以我开始怀疑开发环境以某种方式知道生产环境没有的一些Authlogic内容。

更新:我试图杀死尽可能多的活动部件。我将生产环境和开发环境都设置为指向dev数据库。这并没有改变任何事情。我将生产环境改为开发环境,并开始工作。我将我的开发环境改为生产环境,它停止了工作。这告诉我从开发到生产的变化让它停止工作。但我不知道是什么。

1 个答案:

答案 0 :(得分:9)

我明白了。我最终在数据库中保留了单数user表名,但在我的模型中,我这样做了:

class User < ActiveRecord::Base
  set_table_name "user"
  acts_as_authentic
end

指令必须按顺序排列,否则无效!我不知道为什么会这样(实际上,如果我考虑一下,这是有道理的)我不知道为什么我决定尝试切换订单,但我很高兴我做到了。