2015-09-28 68 views
2

我有一個用戶帶數據庫字段的模型'remark'。我使用Postgres作爲數據庫,'備註'字段的類型爲HSTORE。所以'備註'會存儲一個包含額外用戶信息的散列。在Rails中使用Postgres HSTORE的商店

正如有人建議我增加了一個商店,這樣我的「用戶」模式:

class User < ActiveRecord::Base 
    store :remark, accessors: [ :info ] 
    #some code 
end 

現在我可以在@ user.remark [「信息」]獲得的價值通過這個訪問'@ user.info'。這工作正常。但是,當我嘗試設置和保存這樣一個新值:

@user.info = "some info" 
@user.save 

我得到以下錯誤:

ActiveRecord::StatementInvalid: PG::InternalError: ERROR: Syntax error near '!' at position 4 

是否有可能使用HSTORE型databasefield這樣?我究竟做錯了什麼?

+0

您發佈的代碼看起來沒問題。你確定這個例外來自設置hstore值嗎?你有沒有可能會引發錯誤的回調?生成的sql更新命令的樣子是什麼(在控制檯嘗試或查看您的rails日誌)。 –

+0

SQL(0.8ms)UPDATE「users」SET「remark」= $ 1,「updated_at」= $ 2 WHERE「users」。「id」= $ 3 [[「remark」,「---!ruby/hash:ActiveSupport :: HashWithIndifferentAccess \ ninfo:dit zou moeten werken \ n「],[」updated_at「,」2015-09-28 13:22:04.216668「],[」id「,1]] PG :: InternalError:ERROR:Syntax error靠近'!'在位置4 :UPDATE「users」SET「remark」= $ 1,「updated_at」= $ 2 WHERE「users」。「id」= $ 3 – MDekker

+0

它可以與'@ user.remark ['info'] =「一些信息「; @ user.save'? – omarvelous

回答

1

添加自定義編碼器來

class User < ActiveRecord::Base 
    store :remark, accessors: [ :info ], coder: HstoreCoder 
    #some code 
end 

HstoreCoder類:

class HstoreCoder 
    class << self 
    def load(hash) 
     hash 
    end 

    def dump(value) 
     value.to_hash 
    end 
    end 
end 

它應該幫助。