2014-05-19 39 views
0

我有下面的代碼在我的控制器如何將單例對象傳遞給部分在rails?

@current_chat = current_user.sent_messages 
         .where("created_at > ? and receiver_id = ?", current_user.current_sign_in_at, current_chat[:receiver_id].to_i) 
         .select("body, created_at").each { |message| message.instance_eval { def type; @type end; @type = 'sent' } } 

而且我傳遞@current_chat對象的部分,像這樣:

<%= render partial: 'shared/chat_form', locals: { messages: @current_chat } %> 

但我發現了以下錯誤:

singleton can't be dumped 

在的ActiveSupport第一線:: MessageVerifier#產生

def generate(value) 
    data = ::Base64.strict_encode64(@serializer.dump(value)) 
    "#{data}--#{generate_digest(data)}" 
end 

有關如何解決此問題的任何想法?提前致謝。

回答

0

您不能使用此

@serializer.dump(value) 

這導致錯誤。閱讀這個鏈接,關於在ruby中使用單例。 link

+0

我沒有使用它。這是rails源代碼。我已經提到了問題中的模塊和類。任何方式來避免它? –

+0

爲對象創建單例類後,您不能再在該對象上使用Marshal.dump。編組庫不支持具有單例類的對象。 –

+0

實際上,我想將查詢'current_user.sent_messages'返回的記錄'標記'爲'發送'。任何想法如何做到這一點,而不使用instance_eval? –