接受属性的字符串输入,将整数存储在 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
我正在构建一个 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