Domanda

La gemma will_paginate è rotto sulla mia versione di Oracle. Il metodo predefinito paginate_by_sql nel modulo WillPaginate sta inserendo un extra 'AS' in una query e causando il fallimento.

Il codice stesso è facilmente risolto, ma non sono sicuro del modo migliore per ottenere Rails per ritirare il mio cambiamento.

Non voglio cambiare il codice nella gemma stessa, come che lascerà il mio codice rotto su altre macchine.

Ho cercato di creare un file lib / test.rb contenente:

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

e che richiedono da environment.rb, ma non è raccogliendo i miei cambiamenti. Ho anche provato che richiedono da controllori / application.rb, ma ancora una volta, non raccogliendo i miei cambiamenti.

Temporaneamente, ho preso a lavorare per l'override del metodo all'interno del modello specifico in sé, ma questo è un po 'di un hack, e significa che non posso usarlo su uno qualsiasi degli altri modelli in questo progetto.

Sono sicuro che c'è un modo semplice per fare questo, ma io non sto avendo alcuna fortuna di monitoraggio verso il basso utilizzando Google.

È stato utile?

Soluzione

Quello che state facendo lavorare volontà, ma il codice ha bisogno di guardare in questo modo:

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

In altre parole, andare in finder.rb, eliminare tutto tranne le intestazioni di modulo e il metodo che si desidera sostituire, quindi salvare in un file in lib e includere nella environment.rb. Voila, patch di scimmia istante!

Altri suggerimenti

Una soluzione più concisa:

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

Inserire il codice in un file di inizializzazione in config / inizializzatori. Questo è il posto giusto per inserire il codice che deve essere eseguito quando l'ambiente è caricato. E 'anche meglio organizzare il codice, rendendo l'intento di ogni file più chiaro, quindi i bug saranno più facili da rintracciare. Non ingombrare environment.rb!

Ok, sto solo andando a rendere questo più facile per le persone come me che vengono insieme e ancora lottare un po 'dopo aver letto le altre risposte.

prima trovare il codice che si desidera modificare sul repo github ricercando la riga di codice (si potrebbe facilmente trovare questo utilizzando leva ) che si desidera modificare nel gioiello, e quindi selezionando Code a sinistra al posto di Issues

entrare descrizione dell'immagine qui

entrare descrizione dell'immagine qui

Avanti Copiare il contenuto del modulo che si desidera modificare e metterlo in un file .rb nome appropriato all'interno della cartella config / inizializzatori. Ecco un esempio:

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

Ora, modificarla in:

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

Ora, apportare ulteriori modifiche al codice e riavviare il server.

si va via!

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