2014-05-19 37 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? –