1
我有一個類GoodsTransaction:的ActiveSupport ::關注失蹤超級
require Rails.root.join('lib','two_parties_transaction.rb')
class GoodsTransaction < Transaction
include TwoPartiesTransaction
def counterparty(org, loop = false)
res = #Some logic
res || super(org)
end
end
其中包括TwoPartiesTransaction模塊:
module TwoPartiesTransaction
extend ActiveSupport::Concern
included do
def counterparty(org)
#Some logic
end
end
end
和運行對手失敗:
[email protected]:~/src/white$ rails c
Faraday::Builder is now Faraday::RackBuilder.
Loading development environment (Rails 4.0.0)
2.0.0p247 :001 > tr = GoodsTransaction.new
=> #<GoodsTransaction _id: 5264e2eb75627540dd000000, e(end_date): nil, p(span): nil, s(start_date): nil, u(span_unit): nil, _type: "GoodsTransaction", a(autobook): nil, c(forced_close): nil, d(public_id): nil, k(autobook_period): nil, l(label): nil, n(autobook_number): nil, t(autobook_until): nil, contact_ids: nil, parent_id: nil, fc(creditor): nil, fd(debtor): nil>
2.0.0p247 :002 > tr.counterparty(nil)
NoMethodError: super: no superclass method `counterparty' for #<GoodsTransaction:0x000000090fe1d8>
from /home/muichkine/src/white/app/models/transactions/goods_transaction.rb:148:in `counterparty'
我是什麼這樣做會跳過超級coutnerparty方法嗎?
從你指出的文檔中,我明白1/ClassMethods擴展不包含在基類中,這不是我所看到的。 2 /文檔根本不談論ClassMethods是否是強制性的,因爲它們將代碼直接放置在'indluded do'塊中。我錯了嗎?! – muichkine
1)我同意它很混亂,但'extend'會將模塊的實例方法添加爲類方法。這不是你想要的嗎? 2)我編輯了我的答案,也許這可以澄清一點。 –
如果你碰巧想要模塊方法作爲包含該模塊的類中的實例方法,只需在模塊中使用普通方法(而不是在嵌套的'ClassMethods'中) –