如何使用新的 属性 扩展 ActiveRecord 模型?
How can I extend ActiveRecord model with new propery?
我正在开发 REST API,在将结果(使用 ACtiveRecord 从数据库中获取)发送到客户端之前,我需要使用一些额外的数据对其进行扩展。这是我的设想:
def index
(categories = Category.all()).each() do |category|
category.image = "some image"
end
render json: categories
end
似乎 Ruby 没有像 JS 那样即时添加对象属性,所以这段代码以错误消息结尾
undefined method `image=' for #<Category:0x007f89f0513d40>
我阅读了很多书并找到了在我的 Category
模型中添加 attr_accessor :image
的解决方案。现在它不会抛出错误,而且 image
属性 也不会出现在 JSON 输出中。
与其自己玩弄对象,不如花几分钟时间了解 jbuilder 的工作原理,它非常简单,会让您的生活轻松很多,尤其是 json 格式时包含来自原始数据库对象的一些 extra/different 数据,
这是您可以执行的操作的简单格式
# app/views/categories/index.json.jbuilder
json.array! @categories do |category|
json.prop1 category.prop1
json.prop2 category.prop2
json.image whatever_image_function_here
end
其他解决方案是覆盖 class
的 as_json
方法
在类别模型中对 attr_accessor :image
使用 as_json 方法。
def index
categories = Category.all.each do |category|
category.image = 'some image'
end
render json: categories.as_json(methods: :image)
end
在 rails < 4.2 中它有不同的名称 - to_json
我正在开发 REST API,在将结果(使用 ACtiveRecord 从数据库中获取)发送到客户端之前,我需要使用一些额外的数据对其进行扩展。这是我的设想:
def index
(categories = Category.all()).each() do |category|
category.image = "some image"
end
render json: categories
end
似乎 Ruby 没有像 JS 那样即时添加对象属性,所以这段代码以错误消息结尾
undefined method `image=' for #<Category:0x007f89f0513d40>
我阅读了很多书并找到了在我的 Category
模型中添加 attr_accessor :image
的解决方案。现在它不会抛出错误,而且 image
属性 也不会出现在 JSON 输出中。
与其自己玩弄对象,不如花几分钟时间了解 jbuilder 的工作原理,它非常简单,会让您的生活轻松很多,尤其是 json 格式时包含来自原始数据库对象的一些 extra/different 数据, 这是您可以执行的操作的简单格式
# app/views/categories/index.json.jbuilder
json.array! @categories do |category|
json.prop1 category.prop1
json.prop2 category.prop2
json.image whatever_image_function_here
end
其他解决方案是覆盖 class
的as_json
方法
在类别模型中对 attr_accessor :image
使用 as_json 方法。
def index
categories = Category.all.each do |category|
category.image = 'some image'
end
render json: categories.as_json(methods: :image)
end
在 rails < 4.2 中它有不同的名称 - to_json