没有主键的ActiveRecord模型

我有一个没有主键的ActiveRecord模型GPA

 class GPA < ActiveRecord::Base end 

当我尝试调用GPA.first.to_json我得到TypeError: false is not a symbol 。 我猜这是因为ActiveRecord试图查找主键。 没有主键实现模型的正确方法是什么?

在此处输入图像描述

通常,有一些列或列的组合一起形成主键。 当你说你的表没有主键时你的意思是它没有id字段吗?

是否有另一列是唯一/自然键? 如果是这样,你可以做到:

 class GPA < ActiveRecord::Base set_primary_key :strm # eg column strm is a unique/natural key end 

您还可以将复合键与复合键gem一起使用 ,如下所示:

 class GPA < ActiveRecord::Base set_primary_keys :student_id, :strm end 

您需要在迁移或架构上使用类似的东西

 create_table :gpas, :id => false do |t| t.int :strm t.string :gpa t.string :acad_career t.int :student_id end 

在建模数据时,强烈建议使用rails默认约定。 如果要处理旧表,则仅覆盖默认值。

选项1

您必须通过执行以下操作覆盖模型的主键:

 class Foo < ActiveRecord::Base self.primary_key = "strm" end 

现在,如果你调用.to_json ,json将包含密钥id而不是strm

选项2

替代方法是使用json构造函数,例如jbuilder ,因此它不会尝试使用默认的Rails json构造函数将不存在的'id'转换为json。

你试过ActiveModel :: Serializers :: JSON吗?

添加将id添加为列的迁移。 它不会伤害任何现有的代码。 只要确保它有一个自动增量,所以它不会抱怨重复输入0。