我通过在文件夹模型中创建一个as_json方法,解决了如何将子元素包含在to_json结果中的问题。
def as_json(options={ })
super(
options.merge(
:include => {
:children => { }
}
)
)
end
上面的代码给了我一个子元素列表,但我想要的是包括计数而不是子元素列表。我还想将其过滤为仅包括“Active”子元素。
我似乎无法找到一种有效的方法来实现这一点。
我正在使用下面的代码返回文件夹列表。
def index
@folders = Folder.all(:order => "Name")
respond_with(@folders) do |format|
format.jsonp { render :json => @folders, :callback => params[:callback] }
end
end
最后,我希望确认计数器在所有结果中都能够返回,而不仅仅是JSON。虽然JSON最重要,但我确实希望它也能出现在其他结果中。
我以为我可以通过使用.size将计数器添加到@folders查询后返回的每个文件夹中。然而,这似乎行不通...
接下来,我开始研究向Folder模型添加一个方法,例如...
def child_count
write_attribute(:child_count, children.size)
end
但是在看了一下之后,我意识到这样做并不会起作用...
所以现在我正在研究 :select 来进行一些 SQL 魔法... 但如果有更简洁的方法,我真的不想走这条路。
欢迎提供建议!