2016-08-02 12 views
1

Ich habe es versucht, ernsthaft. Viele Fragen da draußen, aber viele Entwickler sagen "Es funktioniert nicht für mich"; Ich bin einer von ihnen - sagte zu sagen.Sicher und beste Möglichkeit, einen Schienen Edelstein Affe Patch

Ich habe gelesen, auf die beste Art und Weise zu Affe-Patch ein Rails Juwel. Ich habe few gefunden, aber entschieden, this method zu verwenden.

Ich möchte die xeroizer gem Affe-Patch aber eher die invoice.rb model.

Mit dem Link "diese Methode" gehe ich davon aus, dass dies funktionieren sollte, aber es dosent.

Controller:

include Xeroizer::Invoice::InvoiceUrl 
# Invoice.include Xeroizer::Invoice::InvoiceUrl 

def some_method 
    # @xero is in a private method. It's here for short demonstration 
    @xero = Xeroizer::PrivateApplication.new("MY_CONSUMER_KEY", "MY_SECRET_KEY", "#{Rails.root}/privatekey.pem") 
    Rails.logger = @xero.Invoice.invoice_url("ad61ea97-b9e9-4a1e-b754-7c19e62f8cd7") 
end 

nicht definierte Methode `invoice_url‘ für Xeroizer :: Nehmen :: InvoiceModel

Wie fügen Sie benutzerdefinierte Methoden zu einem Schienen gem Klasse?

+0

könnten Sie versuchen, Ihren Code als Initialisierer setzen – Alfie

+0

@Alfie Ich glaube, ich habe versucht mit 'Xeroizer :: PrivateApplication.class_eval ...' aber das hat nie funktioniert. Vielleicht habe ich es nicht richtig gemacht. – Sylar

+0

Ich sehe keinen Versuch, etwas zu affektieren. Würden Sie bitte näher erläutern, was Sie erreichen möchten? – mudasobwa

Antwort

3

Sie Angenommen, versuchen, Affen-Patch Xeroizer::Record::InvoiceModel mit Xeroizer::Invoice::InvoiceUrl, können Sie nur die folgenden Schritte aus direkt nach der ersten Erwähnung von Xeroizer::Record::InvoiceModel (um Rails automatisch zu laden es):

Xeroizer::Record::InvoiceModel.prepend Xeroizer::Invoice::InvoiceUrl 

Dies wird außer Kraft gesetzt Original invoice_url Methode. Das Original könnte immer noch aus einer vorangestellten super aufgerufen werden.

+0

'invoice_url' ist eine benutzerdefinierte Methode, es ist nicht in dem Edelstein. Ich möchte eine benutzerdefinierte Methode ('invoice_url') zum' InvoiceModel' hinzufügen. – Sylar

+0

Ok. Ich habe jetzt eine falsche Anzahl von Argumenten (1 gegeben, erwartet 0). Ist mein Modul korrekt? Ich habe 'invoice_url (id)' es erwartet ein Argument, wenn es erwartet wird 0. Warum? – Sylar

+0

"Ich habe jetzt eine falsche Anzahl von Argumenten (1 gegeben, erwartet 0)" - Ich bin kein Wahrsager. Bitte teilen Sie den StackTrace. Stellen Sie außerdem sicher, dass das ursprüngliche Xeroizer :: Record :: InvoiceModel keine Methode namens "invoice_url" hat. Wenn dies der Fall ist, können Sie das Problem beheben, indem Sie dem Parameter default hinzufügen: 'def invoice_url (id = nil)'. – mudasobwa