【问题标题】:Including a virtual attribute in the respond_with hash在 respond_with 哈希中包含一个虚拟属性
【发布时间】:2011-07-22 16:19:13
【问题描述】:

我正在尝试在 response_to JSON 哈希中包含一个虚拟属性/方法。

模型 (employee.rb)

attr_reader :my_method

def my_method
  return "foobar"
end

控制者 (employees_controller.rb)

respond_to :json

def index
  @employees = Employee.all
  respond_with(:data => @employees, :total => Employee.all.count)
end

重要的是,我将“数据”作为“员工”集合的 json 根,并将“总数”包含在散列中。这很有效,并返回了所有员工和总值的漂亮 JSON 结果。

我的问题是:如何在 JSON 响应中的员工哈希中包含每个员工的虚拟属性“my_method”?

感谢您的宝贵时间!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activerecord


    【解决方案1】:

    这对我有用。

    Employee.rb

    def as_json(options={})
      super.as_json(options).merge({:my_method => my_method})
    end
    

    感谢 cmason 为我指明了正确的方向。欢迎任何其他解决方案。

    【讨论】:

    • 语法错误。它是: super.as_json(options).merge({:my_method => my_method})
    【解决方案2】:

    在 Rails 3 中可以使用以下功能

    @yourmodel.to_json(methods: ['virtual_attr1', 'virtual_attr2']
    

    【讨论】:

      【解决方案3】:

      在你的模型中覆盖 as_json 应该可以解决问题:

      def as_json(options={})
        { :methods=>[:my_method] }.merge(options)
      end
      

      【讨论】:

        猜你喜欢
        • 2013-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        相关资源
        最近更新 更多