Question

Quelqu'un at-il eu du succès ayant Rails 3, MongoId et Ressources héritée de travail? Tous les conseils pour la faire advenir? J'aimerais utiliser les deux pierres précieuses.

Actuellement, je suis en cours d'exécution dans:

undefined method `scoped'

Sur les actions de l'indice.

Merci!


BTW une solution pour la question scope est prioritaire collection comme ceci:

class CampaignsController < InheritedResources::Base

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

end

Mais je suis à la recherche d'une approche plus holistique

Était-ce utile?

La solution

Si vous utilisez uniquement MongoId, ce que vous devez faire est de remplacer le comportement de collection par défaut dans les ressources héritées. Le comportement par défaut est le suivant:

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

Cela dit, ce qui suit devrait faire l'affaire:

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

InheritedResources::Base.send :include, MongoidActions

Vous pouvez même défaut que la collection paginate et ont gratuitement dans la pagination toutes les pages.

Autres conseils

Sinon, vous pouvez patcher MongoId:

module MongoidScoped
  def scoped
    all
  end
end

Mongoid::Finders.send :include, MongoidScoped

Cela fera méthode de travail de inherit_resources comme prévu.

Voici ce que je faisais pour couvrir à la fois héritant de InheritedResources::Base et utilisez l'instruction inherit_resources.

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

En général, vous mettre cela en un initialiseur (j'utilise config/initializers/mongoid.rb).

Fait Mongoid 2.0.0.beta.20 et inherited_resources 1.2.1 amicale.

Très utile après!

Comment feriez-vous si votre contrôleur ne peut pas être sous-classé à partir InheritedResource::Base mais vous devez utiliser la méthode de classe inherit_resources, comme suit:

class MyController < AlreadyInheritedFromController
   inherit_resources
end

le patch de singe ci-dessus ne semble pas fonctionner dans cette configuration.

Il semble que la clé est peut-être InheritedResources::Base.inherit_resources mais je ne suis pas clair sur la manière correcte de remplacer cette méthode. S'il vous plaît corriger si je suis sur le mauvais chemin ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top