1

我有这个模型:

class MenuItem < ActiveRecord::Base
  attr_accessor :name_with_level
  acts_as_nested_set # AwesomeNestedSet gem

  def self.nested_names
    self.each_with_level(MenuItem.order(:lft)) do |menu_item, level|
      name = "- " * level + menu_item.name
      menu_item.name_with_level = name
    end
  end
end

控制器的动作:

def list
  menu_items = MenuItem.all
  render :json => {:items => menu_items}
end

如何name_with_level在输出 JSON 中包含一击 DB?

4

1 回答 1

1

我相信这个 SO 答案会有所帮助:在 respond_with 哈希中包含一个虚拟属性

在你的情况下:

MenuItem

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

这是一种简单的方法,假设您希望所有人都menu_items以自己的 JSON 样式表示返回此虚拟属性。否则,您需要自己构建 ruby​​ 哈希以包含name_with_level每个内容menu+item,然后.to_json包含整个内容。

于 2013-09-08T21:33:51.757 回答