1

有什么方法可以source_type在 railshas_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
4

1 回答 1

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
于 2013-04-27T12:26:45.143 回答