沿着find_by,NoMethodError的Mongoid中的order_by - 未定义的方法`order_by'

时间:2015-03-10 19:56:17

标签: ruby-on-rails ruby mongodb sinatra mongoid

我必须使用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}}文档中有一个嵌入式文档,关系为Callbackembeds_many :callbacks,所以我想对基于embedded_in :bin, :inverse_of => :bins的{​​{1}}个callbacks内的bin个文档。

2 个答案:

答案 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")