Question

Le joyau will_paginate est cassé sur ma version d'Oracle. La méthode de paginate_by_sql par défaut dans le module WillPaginate est l'insertion d'un extra « AS » dans une requête et l'amenant à l'échec.

Le code lui-même est facilement corrigé, mais je ne suis pas sûr de la meilleure façon d'obtenir Rails pour ramasser mon changement.

Je ne veux pas changer le code dans la pierre elle-même, qui laissera mon code cassé sur d'autres machines.

J'ai essayé de créer un fichier lib / test.rb contenant:

module WillPaginate
  def paginate_by_sql
    (my code goes here)
  end
end

et lui demandant de environment.rb, mais il ne ramasser mes changements. J'ai essayé aussi l'obligeant des contrôleurs / application.rb, mais encore une fois, ne pas ramasser mes modifications.

temporairement, je l'ai à travailler en redéfinissant la méthode dans le modèle spécifique lui-même, mais cela est un peu un hack, et signifie que je ne peux pas l'utiliser sur l'un des autres modèles dans ce projet.

Je suis sûr qu'il ya un moyen facile de le faire, mais je ne suis pas avoir de chance de suivi vers le bas en utilisant Google.

Était-ce utile?

La solution

Qu'est-ce que vous faites fonctionne, mais votre code doit ressembler à ceci:

module WillPaginate
  module Finder
    module ClassMethods
      def paginate_by_sql(sql, options)
        # your code here
      end
    end
  end
end

En d'autres termes, allez dans finder.rb, supprimer tout sauf les en-têtes de module et la méthode que vous souhaitez remplacer, puis enregistrez un fichier dans le répertoire lib et inclure dans environment.rb. Le tour est joué, patch singe instantané!

Autres conseils

Une solution plus concise:

WillPaginate::Finder::ClassMethods.module_eval do
 def paginate_by_sql sql, options
   # Your code here
 end
end

Mettre le code dans un fichier initialiseur dans config / initializers. Ceci est le bon endroit pour mettre le code qui doit être exécuté lorsque l'environnement est chargé. Il a également mieux organiser votre code, font l'intention de chaque fichier plus clair, donc les bugs seront plus faciles à trouver. Ne pas encombrer environment.rb!

Ok, je vais juste rendre cela plus facile pour les gens comme moi qui viennent vivoter et encore un peu après avoir lu les autres réponses.

Première trouver le code que vous voulez changer sur le repo github en recherchant la ligne de code (vous pouvez facilement trouver cela en utilisant pry ) que vous voulez changer dans la pierre, puis en sélectionnant Code à gauche au lieu de Issues

entrer image description ici

entrer image description ici

Suivant Copiez le contenu du module que vous voulez changer et placez-le dans un fichier .rb porte bien son nom à l'intérieur de votre dossier config / initializers. Voici un exemple:

module Forem
  module TopicsHelper
    def link_to_latest_post(post)
      text = "#{time_ago_in_words(post.created_at)} #{t("ago_by")} #{post.user}"
      link_to text, forum_topic_path(post.topic.forum, post.topic, :anchor => "post-#{post.id}")
    end
  end
end

Maintenant, changez à:

Forem::TopicsHelper.module_eval do
  def link_to_latest_post(post)
    text = "#{time_ago_in_words(post.created_at)} #{t("ago_by")} #{post.user}"
    link_to text, forum_topic_path(post.topic.forum, post.topic, :anchor => "post-#{post.id}")
  end
end

Maintenant, apporter des modifications supplémentaires au code et redémarrez votre serveur.

vous partez!

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