Scaffolding ActiveRecord: two columns of the same data type

前端 未结 3 1706
旧时难觅i
旧时难觅i 2020-12-16 11:41

Another basic Rails question:

I have a database table that needs to contain references to exactly two different records of a specific data type.

Hypothetical

3条回答
  •  青春惊慌失措
    2020-12-16 11:58

    If there are any methods or validation you want specific to a certain company type, you could sub class the company model. This employs a technique called single table inheritance. For more information check out this article: http://wiki.rubyonrails.org/rails/pages/singletableinheritance

    You would then have:

    #db/migrate/###_create_companies
    class CreateCompanies < ActiveRecord::Migration
      def self.up
        create_table :companies do |t|
          t.string :type  # required so rails know what type of company a record is
          t.timestamps
        end
      end
    
      def self.down
        drop_table :companies
      end
    end
    
    #db/migrate/###_create_videogames
    class CreateVideogames < ActiveRecord::Migration
      create_table :videogames do |t|
        t.belongs_to :developer
        t.belongs_to :publisher
      end    
    
      def self.down
        drop_table :videogames
      end
    end
    
    #app/models/company.rb
    class Company < ActiveRecord::Base 
      has_many :videogames
      common validations and methods
    end
    
    #app/models/developer.rb
    class Developer < Company
      developer specific code
    end
    
    #app/models/publisher.rb
    class Publisher < Company
      publisher specific code
    end
    
    #app/models/videogame.rb
    class Videogame < ActiveRecord::Base 
      belongs_to :developer, :publisher
    end
    

    As a result, you would have Company, Developer and Publisher models to use.

     Company.find(:all)
     Developer.find(:all)
     Publisher.find(:all)
    

提交回复
热议问题