2011-05-13 73 views
2

在Sinatra Web應用程序中,我試圖從數據庫獲取數據並將它們轉換爲UI(最終爲JSON)可接受的對象。但UI和DB字段所需的屬性名稱存在一些差異。與走樣所以我用續集查詢:Sequel JsonSerializer與別名衝突

Sequel::Model.plugin :json_serializer 

class Alarm < Sequel::Model 
#  attr_accessor :id, :Alarm 
end 
filter = Alarm.filter(:NEName => params[:name]).select(:AlarmNo___id, :AlarmMsg___Alarm).all 

但是,當我試圖做到這一點的轉換:

res = filter.to_json 

我得到:**undefined method** 'id' for # Alarm:0x000000027403e0


我也嘗試添加存取(見註釋行) attr_accessor :id, :Alarm 並得到了很多像這樣的對象:{"json_class":"Alarm","id":null,"Alarm":null},wh這似乎是合乎邏輯的結果。


所以,Q1:如何使json_serializer插件續集走樣的工作?

Q2:也許,可能有一些其他的解決方案來提供這種映射(不創造新的類別和/或增加額外的轉換方法) - 像JSON影響通過to_json方法選項屬性名稱等

回答

3

您應該定義ID和報警方法實例方法是這樣的:

class Alarm < Sequel::Model 
    def id() self[:id] end 
    def Alarm() self[:Alarm] end 
end 

attr_accessor不起作用,因爲看起來實例變量,而不是在@values哈希條目。 Sequel::Model#[]在@values散列中查找具有相同名稱的條目。

+0

感謝您的回答,男士。這石頭! – 2011-05-16 07:26:23