5

У кого-нибудь был успех с Rails 3, Mongoid и Inherited Resources Работающий? Какие-нибудь советы для этого? Я хотел бы использовать оба драгоценных камня.Унаследованные ресурсы и Mongoid

В настоящее время я бегу в:

undefined method `scoped' 

На индексных акций.

Спасибо!


BTW обходной путь для контекстного вопроса заключается в переопределении коллекции так:

class CampaignsController < InheritedResources::Base 

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

end 

Но я ищу более целостный подход

ответ

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 

Вы можете даже по умолчанию коллекции постраничной и иметь нумерацию страниц бесплатно на всех страницах для.

+0

Спасибо, Хосе! Прекрасно работает. Я люблю Inherited Resources, и я очень хотел попробовать Mongoid - рад, что было легко заставить их играть хорошо. Обновление – Jonathan

+0

: это уже включено в мастера, верно? – bonhoffer

0

Очень полезный пост!

Как бы вы это сделать, если ваш контроллер не может быть подклассами InheritedResource::Base а вы должны использовать метод класса inherit_resources, например, так:

class MyController < AlreadyInheritedFromController 
    inherit_resources 
end 

выше обезьяна патч, кажется, не работает в этой установке ,

Похоже, что ключ может быть InheritedResources::Base.inherit_resources, но я не знаю, как правильно переписать этот метод. Пожалуйста, исправьте, если я ошибаюсь.

4

В качестве альтернативы вы можете пропатчить Mongoid:

module MongoidScoped 
    def scoped 
    all 
    end 
end 

Mongoid::Finders.send :include, MongoidScoped 

Это сделает inherit_resources метод работы, как и ожидалось.

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 дружественным.

+0

'mongoid 2.0.0.rc7' также. – Voldy