Rails 3,Mongoid和Inherited Resources有效吗?有任何提示可以实现吗?我很乐意使用这两种宝石。
目前我遇到了:
undefined method `scoped'
关于索引操作。
谢谢!
BTW范围问题的解决方法是覆盖集合,如下所示:
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
但我正在寻找更全面的方法
答案 0 :(得分:10)
如果您只使用mongoid,那么您应该做的是覆盖Inherited Resources中的默认收集行为。默认行为是:
那就是说,以下应该可以解决问题:
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.20
和inherited_resources 1.2.1
友好。
答案 3 :(得分:0)
非常有用的帖子!
如果您的控制器不能从InheritedResource::Base
创建子类,而是必须使用类方法inherit_resources
,那么如何执行此操作,如下所示:
class MyController < AlreadyInheritedFromController
inherit_resources
end
上面的猴子补丁在这个设置中似乎不起作用。
看起来密钥可能是InheritedResources::Base.inherit_resources
,但我不清楚覆盖此方法的正确方法。如果我在错误的道路上,请纠正。