ransack gem是否适用于MongoDB? nil的未定义方法`result':NilClass

时间:2013-09-11 06:37:01

标签: mongodb mongoid ruby-on-rails-4 ransack

ransack gem是否适用于MongoDB?

我在下面定制了我的案例:

def index
  @q = Person.search(params[:q])
  @people = @q.result(distinct: true)
end

我有错误: 未定义的方法`结果'为零:NilClass

这里https://github.com/ernie/ransack描述了ActiveRecord,没有提到它只适用于ActiveRecord ......

3 个答案:

答案 0 :(得分:1)

直到3天前,你无法将mansoid用于Ransack,但现在有了这个拉取请求https://github.com/activerecord-hackery/ransack/pull/407,这是可能的。只需使用主分支

gem 'ransack', github: 'activerecord-hackery/ransack'

你可以进行搜索

  @q = Person.search(params[:q])
  @people = @q.result # => Mongoid::Criteria

  # or you can add more Mongoid queries
  @people = @q.result.active.order_by(updated_at: -1).limit(10)

答案 1 :(得分:0)

你可以在他们的list of adapters上看到他们只支持活动记录版本,我不熟悉那个gem,但是就我所理解的那样公平,它会在数据库上生成查询。由于mongodb不是关系数据库,它不了解SQL,因此gem根本不起作用。

答案 2 :(得分:0)

您可以尝试Ransack Mongo

# GET /people
def index
  query = RansackMongo::Query.new
  selector = query.to_query(params[:q])

  @people = Person.where(selector)
end