My understanding of polymorphic associations is you have a an id column and a type column (which must be a model name):
# attachable_id [Integer] # attachable_type [String] class Asset < ActiveRecord::Base belongs_to :attachable, polymorphic: true end class Post < ActiveRecord::Base has_many :assets, as: :attachable end While this is nice in terms of simplicity, it can be somewhat limiting. I would like the option to have my type column be an id pointing to another model, that could have the class name as column there: # attachable_id [Integer] # attachable_type_id [Integer] class Asset < ActiveRecord::Base belongs_to :attachable_type belongs_to :attachable, polymorphic: true end class Post < ActiveRecord::Base has_many :assets, as: :attachable end # model_name [String] class AttachableType < ActiveRecord::Base end The advantages for me are: - Model name changes only need to happen in one place in the db - The ability to add a foreign key constraint on type column - Use up less space with an integer column instead of a text one I'm currently working on a moderately large Rails app that uses a lot of single-table inheritance, and am looking to replace it with polymorphism. While I can do that with the existing functionality, abstracting my list of types into its own table (with extra metadata) would add a lot of convenience. Please let me know if this sounds reasonable. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.
