ruby-on-rails之在输出为 json 之前过滤模型的属性
我需要将我的模型输出为 json,一切正常。然而,一些属性需要通过一些辅助方法过滤它们来“美化”它们,例如 number_to_human_size。我该怎么做呢?
换句话说,假设我有一个名为 bytes 的属性,我想通过 number_to_human_size 传递它并输出 that 结果转成 json。
如果可能的话,我还想“修剪”输出为 json 的内容,因为我只需要一些属性。这可能吗?有人可以给我一个例子吗?我真的很感激。
初步搜索结果暗示了一些关于 as_json 的内容,但我找不到与我的情况相关的具体示例。如果这真的是解决方案,我真的很感激一个例子。
研究:似乎我可以使用 to_json 的选项来明确说明我想要哪些属性,但我仍然需要弄清楚如何“美化” ' 或通过在将它们输出为 json 之前将它们传递给帮助程序来“过滤”某些属性。
我是否会为单个 json 模型创建一个局部,所以 _model.json.erb,然后为我正在使用的操作创建另一个,并在其中简单地用对象集合渲染局部?似乎是一堆箍要跳过。我想知道是否有更直接/原始的方式来改变模型的 json 表示。
请您参考如下方法:
您的模型可以覆盖 Rails 在渲染 json 时使用的 as_json 方法:
# class.rb
include ActionView::Helpers::NumberHelper
class Item < ActiveRecord::Base
def as_json(options={})
{ :state => state, # just use the attribute when no helper is needed
:downloaded => number_to_human_size(downloaded)
}
end
end
现在你可以在 Controller 中调用 render :json:
@items = Item.all
# ... etc ...
format.json { render :json => @items }
Rails 将为 @items 的每个成员调用 Item.as_json 并返回一个 JSON 编码的数组。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



