我认真地试过了。很多问题,但很多开发人员说“它不适合我”;我是其中之一 - 据说。
我正在阅读有关修补rails gem的最佳方法。我找到few但决定使用this method。
我想修补xeroizer gem,而不是invoice.rb model。
# lib/xeroizer/invoice/invoice_url.rb
module Xeroizer
module Invoice
module InvoiceUrl
def invoice_url(id)
@application.http_get(@application.client, "#{url}/#{CGI.escape(id)}/OnlineInvoice")
end
end
end
end
使用“此方法”链接,我认为这应该可行,但它确实有效。
控制器:
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
Xeroizer :: Record :: InvoiceModel
的未定义方法`invoice_url'
如何向rails gem的类中添加自定义方法?
答案 0 :(得分:3)
假设您尝试使用Xeroizer::Record::InvoiceModel
对Xeroizer::Invoice::InvoiceUrl
进行补丁,您可能会在第一次提及Xeroizer::Record::InvoiceModel
之后立即执行以下(制作Rails自动加载它):
Xeroizer::Record::InvoiceModel.prepend Xeroizer::Invoice::InvoiceUrl
这将覆盖原始的invoice_url
方法。原始版本仍然可以使用super
从前面调用。