有没有办法在rails source_type
has_many
through
关联中定义polymorphic
运行时。
下面的代码应该给你一个简短的想法..但它不起作用..任何建议??
class A < ...
has_many :message_messagables, :foreign_key => :message_id
has_many :messagables, :through => :message_messagables, :source => :messagable, :source_type => lambda { |a| a.custom_type }
def custom_type
raise "needs to be defined inside subclass"
end
end
class MessageMessagable < ...
belongs_to :messagable, :polymorphic => true #[C, D]
belongs_to :message
end
class B < A
def custom_type
"C"
end
end
class E < A
def custom_type
"D"
end
end
答案 0 :(得分:2)
我遇到了同样的问题。我通过列出所有可用的资源类型并添加了一个调度方法来解决它。
class A < ...
has_many :message_messagables, :foreign_key => :message_id
# list all source types as association
%w(email file).each do |source_type|
has_many source_type.pluralize.to_sym, :through => :message_messagables, :source => :messagable, :source_type => source_type
end
# dispatch methodk
def messagables
public_send custom_type.pluralize.to_sym
end
end