我想將我的幾個模型類擴展到「資產」類。 這四種類型的Assets中的每一種都能夠生成一個slug從而避免set_callback(:save, :before)
因此,我不想寫出四種相同的方法,而是希望他們擴展一個Asset類,該類將具有set_callback(以及其他方法)。Mongoid的Rails模塊
起初我試着簡單地讓它們擴展Asset類,但遇到了問題,當我將其中一個資產保存到數據庫(mongo)時,它們插入的集合稱爲Asset而不是它們自己的名稱。
在我搜索周圍的人似乎推薦使用模塊來代替。所以,我已經試過了:
module Asset
field :slug, :type => String
set_callback(:save, :before) do |document|
# make document.slug = to whatever
end
end
class Video
include Mongoid::Document
include Asset
field :video_name, :type => String
field :description, :type => String
field :some_more_fields, :type => String
end
,但我得到了一些錯誤,當我包括資產:
'undefined method `field' for Asset:Module'
注:我使用Mongoid
謝謝,對我很好。在我的Notifiable模塊中也使用'''base.send(:before_create,:notify_on_create)''和''base.send(:embeds_many,:notifications,:as =>:notifiable)'''' – genkilabs 2013-07-26 20:02:37
你將如何去發送聲明在該模塊範圍? – Alex 2013-12-09 00:01:12
我得到'包含':資產:模塊(NoMethodError)未定義的方法'字段'。也許這不適用於Ruby 2.3.1? – 2016-05-06 18:10:08