我有一個消息類可以發送給用戶。直到最近,它只能發送給一個用戶,但不是要發送給多個用戶。我決定在MessageProxy中包裝消息(真的是一個裝飾器,但這個詞已經被Draper採用了)。爲裝飾器創建SimpleForm
class Message < ActiveRecord::Base
belongs_to :priority_type
end
class MessageProxy
def initialize(args = {})
@message = Message.new(args)
end
def method_missing(method_sym, *arguments, &block)
@message.send(method_sym, *arguments, &block)
end
end
我試圖使用消息代理的形式,但我得到Association :priority_type not found
。這是特別奇怪,因爲從我的rails控制檯,MessageProxy行爲與預期相同:
MessageProxy.new.priority_type # => nil instead of an exception
爲什麼我的代理轉發的關聯方法的消息對象?
我查看了SimpleForm源代碼,發現問題是
in SimpleForm::FormBuilder.find_association_reflection(association)
。它看起來在@object.class
,但由於@object是我的裝飾者,而不是代表,它無法找到關聯。
如果我覆蓋.class
使它像消息一樣嘎嘎聲,那麼當我嘗試呼叫MessageProxy.new.valid?
時,我也會啓動消息驗證程序。