Унаследованные ресурсы и монгоид


person Jonathan    schedule 28.01.2011    source источник


Ответы (4)


Если вы используете только 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

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

person José Valim    schedule 29.01.2011
comment
Спасибо Хосе!! Работает отлично. Мне нравятся Inherited Resources, и я очень хотел попробовать Mongoid — рад, что мне было легко заставить их хорошо играть. - person Jonathan; 31.01.2011
comment
обновление: это уже включено в master, верно? - person bonhoffer; 29.11.2011

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

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

Это заставит метод inherit_resources работать должным образом.

person Michał Szajbe    schedule 08.02.2011

Вот что я сделал, чтобы охватить как наследование от 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 дружелюбными.

person alg    schedule 21.02.2011

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

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

class MyController < AlreadyInheritedFromController
   inherit_resources
end

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

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

person george    schedule 04.02.2011