Polymorphic association

后端 未结 3 483
心在旅途
心在旅途 2021-02-06 05:57

If you have polymorphic belongs_to associations then references will add both of the columns required:

create_table :products do |t|
  t.references :attachment,          


        
3条回答
  •  悲&欢浪女
    2021-02-06 06:20

    Here is the documentation on the references method: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938

    The code of the references method is as follows:

    497:       def references(*args)
    498:         options = args.extract_options!
    499:         polymorphic = options.delete(:polymorphic)
    500:         args.each do |col|
    501:           column("#{col}_id", :integer, options)
    502:           column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil?
    503:         end
    504:       end
    

    As you can see. It adds both a [col]_id and [col]_type column to the table.

    It's the same as saying:

    create_table :products do |t|
      t.integer :attachment_id
      t.string  :attachment_type, :default => 'Photo'
    end
    

    Polymorphic associations are used to connect one kind of objects to multiple kinds of other objects.

    A good example might be an application that supports tags, where tags can be connected to both Products and Categories.

    In your example, it looks like Products could be attached to multiple kinds of objects, where the default kind of object is a Photo. (attachment_type would be "Photo", and attachment_id would be an id of a row in the 'photos' table)

提交回复
热议问题