我在遗留数据库表上创建一个 Rails 应用程序。在本地一切正常,但在服务器上,每当我执行 Article.find(1)
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for nil:NilClass
ActiveRecord::StatementInvalid: PG::Error: ERROR: zero-length delimited identifier at or near """"
LINE 1: SELECT "articles".* FROM "articles" WHERE "articles"."" = $1 LIMIT 1
遗留数据库有一个 id 字段,但是模式描述了 id
create_table "articles", :id => false, :force => true do |t|
t.decimal "id", :precision => 10, :scale => 0, :null => false
...
注意 Article.find_by_id(1) 返回记录没有任何问题。
有什么办法解决这个问题吗?
最佳答案
已更新 - 见下文
事实证明,将以下内容添加到模型中可以解决此问题:
class Article < ActiveRecord::Base
set_primary_key :id
...
大概是因为rails没有建表,所以不知道主键是什么字段。虽然这看起来有点奇怪,但如果有根据的猜测带有警告 - 或者甚至是更友好的错误消息 - 将不胜感激。
更新: Rails 3.2+ 以上方法已弃用。新方法如下:
class Article < ActiveRecord::Base
self.primary_key = :id
...
感谢@lboix 指出这一点!
关于ruby-on-rails-3 - Rails Article.find 1 在遗留数据库上引发 ActiveRecord::StatementInvalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542199/