Ruby/Rails的新功能,請耐心等待。'as_json'中的類方法不適用於索引操作
我有一個ActiveRecord模型類狀態。我將它渲染爲json以用於移動web應用程序。它由一個id,名稱,代碼和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
...它適用於展示和索引操作。只要我以任何身份介紹彩色寶石,它都不起作用。再次,我將這歸因於我如何使用寶石,而不是寶石本身的問題。
我忽視了什麼核心原則?
TL,DR:我渲染爲json,我的自定義方法正在爲show動作而不是索引動作。
您的log/development.log文件中是否有更多詳細信息?難道是你的數據庫中的一個狀態有錯誤的數據(例如,它不再是'Color :: RGB.from_html'的有效輸入) – 2012-01-04 20:13:44
@FrederickCheung我對這裏的禮節不確定......我我希望將此標記爲已回答,但我不想將您的「代表」帶走。你可以發表你的評論作爲答案? – Tim 2012-01-04 21:30:55
當然,已經發布了它。 – 2012-01-04 22:03:57