5

有没有人成功让 Rails 3、MongoidInherited Resources工作?实现它的任何提示?我很想同时使用这两种宝石。

目前我遇到:

undefined method `scoped'

关于索引操作。

谢谢!


顺便说一句,针对范围问题的解决方法是像这样覆盖集合:

class CampaignsController < InheritedResources::Base

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

end

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

4

4 回答 4

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

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

于 2011-01-29T08:31:54.727 回答
4

或者,您可以修补 Mongoid:

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

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

于 2011-02-08T13:11:28.783 回答
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友好。

于 2011-02-21T15:23:47.320 回答
0

很有帮助的帖子!

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

class MyController < AlreadyInheritedFromController
   inherit_resources
end

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

看起来关键可能是InheritedResources::Base.inherit_resources,但我不清楚覆盖此方法的正确方法。如果我在这里走错了路,请更正。

于 2011-02-04T03:57:52.517 回答