我想創建一個可供不同模型包含的常見映射功能的關注。這個模塊將有一個返回計算值的方法,除非包含的模型已經設置了相同名稱的屬性。從包含的模型屬性中獲取相同名稱的模塊方法
例如:
module Mappable
extend ActiveSupport::Concern
included do
has_one :map, as: :mappable, dependent: :destroy
end
def centroid
Point('123.45 321.21') #whatever
end
def longitude
super || centroid.x
end
def latitude
super || centroid.y
end
end
所以在方法「超級」將是模型的「東經」或「緯度」屬性。如果沒有設置,從質心得到它。
UPDATE:
我的代碼實際工作的寫入。我沒有正確測試這個問題。
你已經有了什麼模塊問題? – usha
NoMethodError:super:沒有超類方法'latitude'for# –
包含模塊後,您無法調用重寫的方法。如果您需要覆蓋特定方法的模塊行爲,請在包含該模塊後重新定義類中的方法。 –