接受属性的字符串输入,将整数存储在 DB 中,return 字符串存储在 API 中

Accept string input for attribute, store integer in DB, return string in API

我正在构建一个 rails api 应用程序。我有一只动物 class

class Animal < ActiveRecord::Base
  TYPES = { herbivore: 1, carnivore: 2, omnivore: 3 }
  attr_reader :name, :type
end

在数据库中,我将类型的值保存为整数 1、2、3。

在控制器中,创建操作接受类型为 "herbivore"、"carnivore" 或 "omnivore"

#POST animals
Request:  { name: "tommy", type: "carnivore" }
Response: { id: 1 }, status: 204

同样,show 动作响应 "herbivore"、"carnivore" 或 "omnivore"

#GET animals/1
Response: { id: 1, name: "tommy", type: "carnivore" }, status: 200

为了实现我想要的,我在 Animal 中添加了这些方法 class

def type=(value)
 super(TYPES[value.to_sym])
end

def type
  TYPES.key(read_attribute(:type))
end

这很好用。

有更好的方法吗?

您可以使用 ActiveRecord::Enum,像这样:

class Animal < ActiveRecord::Base
  enum type: [ :herbivore, :carnivore, :omnivore ]
end