Domanda

Qualcuno ha avuto successo con Rails 3, Mongoid e Inherited Resources di lavoro? Qualche consiglio per fare accadere? Mi piacerebbe utilizzare entrambe le gemme.

Al momento io sono in esecuzione in:

undefined method `scoped'

sulle azioni di indice.

Grazie!


A proposito di una soluzione per il problema di ambito è quello di raccolta di esclusione in questo modo:

class CampaignsController < InheritedResources::Base

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

end

Ma io sono alla ricerca di un approccio più olistico

È stato utile?

Soluzione

Se si utilizza mongoid solo, cosa si dovrebbe fare è quello di sovrascrivere il comportamento predefinito in collezione Inherited Resources. Il comportamento di default è questo:

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

Detto questo, il seguente dovrebbe fare il trucco:

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

InheritedResources::Base.send :include, MongoidActions

E 'possibile anche la raccolta di default per paginate e hanno impaginazione gratuitamente in tutte le pagine.

Altri suggerimenti

In alternativa si può patchare Mongoid:

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

Questo renderà il lavoro metodo inherit_resources come previsto.

Here's what I did to cover both inheriting from InheritedResources::Base and using inherit_resources statement.

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

You typically put this into an initializer (I use config/initializers/mongoid.rb).

Makes Mongoid 2.0.0.beta.20 and inherited_resources 1.2.1 friendly.

Very helpful post !

How would you do this if your controller cannot be subclassed from InheritedResource::Base but rather you have to use the class method inherit_resources, like so :

class MyController < AlreadyInheritedFromController
   inherit_resources
end

the above monkey patch does not seem to work in this setup.

It looks like the key might be InheritedResources::Base.inherit_resources but i am unclear on the correct way to overwrite this method. Please correct if i am on the wrong path here.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top