继承资源和Mongoid

时间:2011-01-28 21:33:06

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid inherited-resources

Rails 3,MongoidInherited Resources有效吗?有任何提示可以实现吗?我很乐意使用这两种宝石。

目前我遇到了:

undefined method `scoped'

关于索引操作。

谢谢!


BTW范围问题的解决方法是覆盖集合,如下所示:

class CampaignsController < InheritedResources::Base

  def collection
    @campaigns ||= end_of_association_chain.paginate(:page => params[:page])
  end

end

但我正在寻找更全面的方法

4 个答案:

答案 0 :(得分:10)

如果您只使用mongoid,那么您应该做的是覆盖Inherited Resources中的默认收集行为。默认行为是:

https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/base_helpers.rb#L22-24

那就是说,以下应该可以解决问题:

module MongoidActions
  def collection
    get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
  end
end

InheritedResources::Base.send :include, MongoidActions

您甚至可以将集合默认为分页,并在所有页面中免费分页。

答案 1 :(得分:4)

或者你可以修补Mongoid:

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

这将使inherit_resources方法按预期工作。

答案 2 :(得分:2)

以下是我为了继承InheritedResources::Base和使用inherit_resources语句所做的工作。

module InheritedResources
  module BaseHelpers
    def collection
      get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
    end
  end
end

您通常会将其放入初始值设定项中(我使用config/initializers/mongoid.rb)。

使Mongoid 2.0.0.beta.20inherited_resources 1.2.1友好。

答案 3 :(得分:0)

非常有用的帖子!

如果您的控制器不能从InheritedResource::Base创建子类,而是必须使用类方法inherit_resources,那么如何执行此操作,如下所示:

class MyController < AlreadyInheritedFromController
   inherit_resources
end

上面的猴子补丁在这个设置中似乎不起作用。

看起来密钥可能是InheritedResources::Base.inherit_resources,但我不清楚覆盖此方法的正确方法。如果我在错误的道路上,请纠正。