Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails+;活动记录:如何在结果中包含子计数?_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails RubyonRails+;活动记录:如何在结果中包含子计数?

Ruby on rails RubyonRails+;活动记录:如何在结果中包含子计数?,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,通过在文件夹模型中创建as_json方法,我了解了如何在to_json结果中包含子项 def as_json(options={ }) super( options.merge( :include => { :children => { } } ) ) end 上面的代码给了我一个孩子的列表,但是我想要的是包含计

通过在文件夹模型中创建as_json方法,我了解了如何在to_json结果中包含子项

def as_json(options={ })
  super(
          options.merge(
                  :include => {
                          :children => { }
                  }
          )
  )
end
上面的代码给了我一个孩子的列表,但是我想要的是包含计数,而不是孩子的列表。我还想将其过滤为仅“活动”的子对象

我似乎想不出一个有效的方法来做这件事

我使用下面的代码返回文件夹列表

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返回的每个文件夹中。然而,这似乎不起作用

接下来,我开始考虑向文件夹模型添加一个方法,例如

def child_count
  write_attribute(:child_count, children.size)
end
但看了之后,我意识到这不是真的有用

所以现在我正在研究:选择做一些sql魔术。。。但如果有更干净的方法,我真的不想走那条路


谢谢

只需添加一个
child\u count
方法,返回子项的数量,然后使用
的选项作为\u json

def as_json(options = { })
    super(options.merge(:methods => :child_count))
end
不过,如果
选项中已经有
:方法
,您可能需要更加小心地处理该
合并
,您将覆盖它;这样做可能比直接合并更好:

def add_child_count(options)
    options[:methods] = [ options[:methods], :child_count ].flatten.compact.uniq
    options
end

def as_json(options = { })
    super(add_child_count(options))
end

对于XML,您可以使用代替json的
做几乎相同的事情好的,我找到了答案,但是我不能回答我自己的问题,因为我的声誉不到100。这是我博客上答案的链接…我刚刚发现了这一点。我试图回答我自己的问题,但我的代表太低,它不让我。谢谢,不过这正是我想出来的!哦,有一个问题。。。这只会将其添加到json中。我想我可以创建一个as_-xml方法来将其添加到xml中,但这不起作用。然而,我发现我可以使用xml来满足那些需要相同功能的人。@Altonymous:xml应该是相同的。我还为您可能感兴趣的
merge
处理添加了一个“paranoia”更新,以防将来有人说
x.as_json(:methods=>:aha!)