Polymorphic Assocations using Integer ID type fields

后端 未结 4 1658
面向向阳花
面向向阳花 2020-12-19 01:54

I have a table Foo that has a polymorphic belongs_to association called bar. The foos table has the standard bar_id colum

相关标签:
4条回答
  • 2020-12-19 02:21

    There are two approaches for this.

    First is easy:

    has_many :bars, :conditions => "whatever you want"
    

    Second could be tricky:

    set_inheritance_column :bar_type_id
    
    0 讨论(0)
  • 2020-12-19 02:26

    I'm making use of the polymorphic integer type gem, written by one of my co-workers. It's slightly easier to use than the examples given above, in my opinion. For example, after configuring the mapping, you change from:

    belongs_to :actor,              polymorphic: true
    

    to the new format:

    belongs_to :actor,              polymorphic: true, integer_type: true
    
    0 讨论(0)
  • 2020-12-19 02:30

    We did it by overriding the association_class method in a new module and included it using the :extend option. Also created a integer to string mapping hash to make things easier.

    In config/initializers directory or anywhere you like, create a file and define the hash INT_OBJECT_TYPE_TO_CLASSNAME = { 0 => "Project", 1 => "Task", 2 => "Timesheet" }

    class CommentObjectType < ActiveRecord::Base
      module ClassNamesAsInt
        def association_class
          return INT_OBJECT_TYPE_TO_CLASSNAME[restricted_object_type].constantize
        end
      end
    end
    

    In comments.rb

    belongs_to :commentable, :polymorphic => true, :extend => CommentObjectType::ClassNamesAsInt
    
    0 讨论(0)
  • 2020-12-19 02:44

    I am not sure, but you can play around

    belongs_to :bar, :class_name => proc{ BarType.find(self.bar_type_id).name }, :foreign_key => :bar_id
    
    0 讨论(0)
提交回复
热议问题