Pregunta

¿Alguien ha tenido éxito con Rails 3? Monmongoide y Recursos heredados ¿laboral? ¿Algún consejo para que esto suceda? Me encantaría usar ambas gemas.

Actualmente me estoy encontrando con:

undefined method `scoped'

En acciones de índice.

¡Gracias!


Por cierto, una solución para el problema del alcance es anular la colección como así:

class CampaignsController < InheritedResources::Base

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

end

Pero estoy buscando un enfoque más holístico

¿Fue útil?

Solución

Si está utilizando solo monmongoide, lo que debe hacer es sobrescribir el comportamiento de colección predeterminado en recursos heredados. El comportamiento predeterminado es este:

https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/base_helpers.rb#l22-24

Dicho esto, lo siguiente debería hacer el truco:

module MongoidActions
  def collection
    get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
  end
end

InheritedResources::Base.send :include, MongoidActions

Incluso puede predecir la colección para paginar y tener paginación gratis en todas las páginas.

Otros consejos

Alternativamente, puede parchear Mongoide:

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

Esto hará inherit_resources El método funciona como se esperaba.

Esto es lo que hice para cubrir ambos heredando de InheritedResources::Base y usando inherit_resources declaración.

module InheritedResources
  module BaseHelpers
    def collection
      get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
    end
  end
end

Por lo general, lo pones en un inicializador (uso config/initializers/mongoid.rb).

Hace Mongoid 2.0.0.beta.20 y inherited_resources 1.2.1 amigable.

¡Publicación muy útil!

¿Cómo harías esto si tu controlador no puede ser subclasificado InheritedResource::Base sino que tienes que usar el método de clase inherit_resources, al igual que :

class MyController < AlreadyInheritedFromController
   inherit_resources
end

El parche de mono anterior no parece funcionar en esta configuración.

Parece que la clave podría ser InheritedResources::Base.inherit_resources Pero no estoy claro sobre la forma correcta de sobrescribir este método. Corrija si estoy en el camino equivocado aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top