我是RoR的新手,使用Mongoid面临问题 代码是由其他人编写的,但我需要做一些修改 这是模型中的代码:
class AClass
include Mongoid::Document
field :data, type: String
...
scope ...
def self.search(params)
AClass.only(...)# return a Criteria Object
end
def as_json(options={})
...
end
end
控制器中的代码:
def index
@res = AClass.search(query_params) # @res is a Criteria Object
respond_to do |format|
format.json { render json: @res.as_json(format: params[:format],
path: request.env['ORIGINAL_FULLPATH']) } # why AClass's as_json is called
format.xml { render xml: @res.as_json(format: params[:format],
path: request.env['ORIGINAL_FULLPATH']).
to_xml(root: "root",
camelize: true) }
format.html
end
end
我有两个问题:
我发现only
方法属于Mongoid::Criteria
,而Mongoid::Document
模块不包含Criteria
类。上面的代码中只包含Mongoid::Document
。为什么only
可以在self.search
中调用?
我发现Only的返回值是Mongoid::Criteria
。但是,当我请求json数据时,@res.as_json
可以调用AClass
的{{1}}方法。为什么呢?
答案 0 :(得分:1)
- 我发现只有方法属于
中调用 醇>Mongoid::Criteria
,而Mongoid::Document
模块不包含Criteria
类。只要Mongoid::Document
包含在上面的代码中。为什么唯一可能 在self.search
?
可以在Mongoid::Criteria::Queryable::Optional中找到only
方法,该方法通过Mongoid::Document委托给您(随意挖掘代码)。
- 我发现
醇>only
的返回值为Mongoid::Criteria
。但是,当我请求json数据时,@res.as_json
可以调用AClass
的{{1}}方法。为什么?
as_json
在基础文档集合上调用Mongoid::Criteria#as_json
,在每个基础文档上调用as_json
:
as_json