我有一个名为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数据库。这并没有改变任何事情。我将生产环境改为开发环境,并开始工作。我将我的开发环境改为生产环境,它停止了工作。这告诉我从开发到生产的变化让它停止工作。但我不知道是什么。
答案 0 :(得分:9)
我明白了。我最终在数据库中保留了单数user
表名,但在我的模型中,我这样做了:
class User < ActiveRecord::Base
set_table_name "user"
acts_as_authentic
end
指令必须按顺序排列,否则无效!我不知道为什么会这样(实际上,如果我考虑一下,这是有道理的)我不知道为什么我决定尝试切换订单,但我很高兴我做到了。