【问题标题】:Rails to_json static method: TypeError X is not a symbolRails to_json 静态方法:TypeError X 不是符号
【发布时间】:2013-03-26 01:26:57
【问题描述】:

我希望我的 to_json 包含来自控制器的静态方法。

class ApplicationController < ActionController::Base   
  def self.server_time
    Time.now
  end 
end

我都试过了:

o.to_json(:methods => ApplicationController.server_time)

还有

o.to_json(:include => ApplicationController.server_time)

但我得到 TypeError

TypeError: 2013-04-04 08:33:31 +0300 is not a symbol

o 是一个 ActiveRecord 对象

【问题讨论】:

  • 抱歉,您要包含方法代码或方法结果吗?
  • @ted 抱歉不清楚。 方法结果,方法代码是什么意思?
  • Time.now 序列化(:
  • xdsemx 给出的答案也对我有用。得到了当前时间的 json
  • 在你的例子中o 是什么?

标签: ruby-on-rails json serialization static


【解决方案1】:

不知道在您的上下文中o 是什么,但您也可以:

[o, ApplicationController.server_time].to_json

{ApplicationController.server_time: o}.to_json

在您的 json 中包含时间

【讨论】:

    【解决方案2】:
    ApplicationController.server_time.to_json
    

    为我工作

    【讨论】:

      【解决方案3】:

      如果您希望 JSON 像以前一样使用新的“时间”键,请执行以下操作:

      o.as_json.merge({time:ApplicationController.server_time}).to_json
      # => {time:123, id:1, name: 'name', ...}
      

      你也可以用一个键来表示时间,用一个键来表示对象:

      {time: ApplicationController.server_time, object: o}.to_json
       # => {time:123, object: {id:1, name: 'name', ...} }
      

      感谢 Rails 的魔力,您不必在控制器中指定 to_json

      render json: o.as_json.merge({time:ApplicationController.server_time})
      # or the other option
      render json: {time: ApplicationController.server_time, object: o}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多