【发布时间】:2012-02-02 15:40:36
【问题描述】:
Ruby/Rails 新手,请耐心等待。
我有一个 ActiveRecord 模型类Status。我将其渲染为 json 以在移动 Web 应用程序中使用。它由id、名称、代码和back_color(十进制颜色)组成。我需要进行从 BGR 十进制到 RGB 十六进制的颜色转换,所以我决定使用 color gem。但最终,我认为这个问题是我的方法定义的基础。
当我请求一条记录 (/statuses/1.json) 时,一切都按预期工作。当我请求索引 (/statuses.json) 时,我收到内部服务器错误 (500)。我能从中获得的最详细信息是ArgumentError (ArgumentError)
我定义了这样的转换方法:
def color_hex
bgr = Color::RGB.from_html(back_color.to_s(16)) #converts dec to hex, then creates new color object from it
rgb = Color::RGB.new(bgr.blue,bgr.green,bgr.red) #swaps red & blue into new color object
rgb.html #outputs rgb hex for use in html
end
我还在模型中包含了一个自定义的as_json,添加了color_hex方法:
def as_json(options={})
super(:methods => :color_hex)
end
在我的控制器中,我使用标准的format.json { render :json => @statuses }。
正如我所说,我认为这是一个基本问题,所以我将方法简化为概念验证:我至少可以操纵 back_color 吗?
def color_hex
back_color * -1
end
...它适用于显示和索引操作。一旦我以任何身份介绍彩色宝石,它就不起作用。同样,我将其归因于我使用 gem 的方式,而不是 gem 本身的问题。
我忽略了哪些核心原则?
TL,DR:我正在渲染为 json,我的自定义方法适用于 show 操作,但不适用于 index 操作。
【问题讨论】:
-
您的 log/development.log 文件中有更多详细信息吗?可能是您的数据库中的状态之一包含错误数据(因此它不再是
Color::RGB.from_html的有效输入) -
@FrederickCheung 我不确定这里的礼仪……我想将此标记为已回答,但我不想带走您的“代表”。您可以发表您的评论作为答案吗?
标签: ruby-on-rails ruby json methods gem