我必须使用Mongoid在sinatra应用程序中检索mongodb记录。 为此,我尝试使用以下查询来检索检索的记录:
@bin = Bin.find_by(bin_id: params[:bin_id]).order_by(:created_at.desc)
但是我得到了NoMethodError,
NoMethodError - undefined method `order_by' for #<Bin:0x00000101d24d60>:
/Users/harshsingh/Documents/Codes/mogreet-requestbin/app.rb:79:in `block in <class:App>'
/Users/harshsingh/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call'
/Users/harshsingh/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!'
/Users/harshsingh/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]'
...
我不确定为什么order_by
无效,我试着查看Mongoid文档,但找不到对我有用的任何内容。
修改
抱歉,我忘了提及,我在名为Bin
的{{1}}文档中有一个嵌入式文档,关系为Callback
和embeds_many :callbacks
,所以我想对基于embedded_in :bin, :inverse_of => :bins
的{{1}}个callbacks
内的bin
个文档。
答案 0 :(得分:3)
find_by
返回单个文档:
#find_by(attrs = {}){| result | ......}⇒文件?
根据条件找到第一份文件。
并且文档没有order_by
方法。如果您要查找bin_id
的所有文档,请使用where
:
@bins = Bin.where(bin_id: params[:bin_id]).order_by(:created_at.desc)
请注意,我将实例变量切换为复数名称,因为它现在包含(可能)多个Bin
s。
答案 1 :(得分:2)
问题编辑后,您似乎在此查询中遗漏了callbacks
@callbacks = Bin.find_by(bin_id: params[:bin_id]).callbacks.order_by(created_at: "desc")