Унаследованные ресурсы и Mongoid - PullRequest
5 голосов
/ 29 января 2011

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

В настоящее время я сталкиваюсь с:

undefined method `scoped'

Об индексных действиях.

Спасибо!


Кстати, обходной путь для решения проблемы - переопределить коллекцию следующим образом:

class CampaignsController < InheritedResources::Base

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

end

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

Ответы [ 4 ]

10 голосов
/ 29 января 2011

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

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

4 голосов
/ 08 февраля 2011

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

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

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

2 голосов
/ 21 февраля 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 дружественными.

0 голосов
/ 04 февраля 2011

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

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

class MyController < AlreadyInheritedFromController
   inherit_resources
end

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

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

...