Ruby/Rails 新手,请耐心等待。
我有一个 ActiveRecord 模型类Status。我将其渲染为 json 以在移动 Web 应用程序中使用。它由id、name、code 和 back_color(十进制颜色)组成。我需要进行从 BGR 十进制到 RGB 十六进制的颜色转换,所以我决定使用颜色宝石。但最终,我认为这个问题是我的方法定义的基础。
当我请求一条记录 ( /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
...它适用于 show 和 index 操作。一旦我以任何身份介绍彩色宝石,它就不起作用。同样,我将其归因于我使用 gem 的方式,而不是 gem 本身的问题。
我忽略了哪些核心原则?
TL,DR:我正在渲染为 json,我的自定义方法适用于 show 操作,但不适用于 index 操作。