ruby-on-rails-3 - Rails Article.find 1 在遗留数据库上引发 ActiveRecord::StatementInvalid

标签 ruby-on-rails-3 postgresql exception activerecord

我在遗留数据库表上创建一个 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/

相关文章:

ruby - 在 Rails 中,如何向 String 类添加一个新方法?

c# - 捕获唯一键违规的通用方法

java - 尝试/捕获异常未按计划工作

ruby-on-rails - Rails、path_names 和嵌套资源

ruby-on-rails-3 - 导轨 : method for 'standardizing' url input from users?

ruby-on-rails-3 - Rails 3.2 - accepts_nested_attributes_for 并加入模型

postgresql - 如何删除 Postgres 9.2 中的死行版本

postgresql - 如何使用 PostGIS 升级 PostgreSQL?

sql - 在 postgresql ...query... 中加入两个单独的查询(可能或不可能)

ios - 在 UIWebview 中打开一些 xlsx 文件时出错