Вопрос

У кого -нибудь успешно имел Rails 3, Монгоид а также Унаследованные ресурсы работающий? Есть советы, чтобы это произошло? Я хотел бы использовать обе драгоценные камни.

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

undefined method `scoped'

По индексным действиям.

Спасибо!


Кстати, обходной путь по вопросу о прицеле - это переопределить коллекцию, например, SO:

class CampaignsController < InheritedResources::Base

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

end

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

Это было полезно?

Решение

Если вы используете только монгоид, вы должны перезаписать поведение по умолчанию в унаследованных ресурсах. Поведение по умолчанию таково:

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

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

Другие советы

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

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

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

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

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

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

class MyController < AlreadyInheritedFromController
   inherit_resources
end

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top