w ݁Ռɺ͜Μͳײ͡ͷ.PEFM $PODFSOΛ࣮ module ConnectableModule extend ActiveSupport::Concern included do has_one :glue1, class_name: "::Connectable::Glue", as: :connector1, dependent: :destroy has_one :glue2, class_name: "::Connectable::Glue", as: :connector2, dependent: :destroy accepts_nested_attributes_for :glue1, :glue2 private :glue1, :glue2 scope :orphans, lambda { select("#{table_name}.*") .joins("LEFT OUTER JOIN connector_glues as conn_glues ON (#{table_name}.id = conn_glues.connector1_id AND conn_glues.connector1_type = '#{self.name}') OR (#{table_name}.id = conn_glues.connector2_id AND conn_glues.connector2_type = '#{self.name}')") .where("conn_glues.id IS NULL") } end def glue glue1 || glue2 end def opposed_connector return glue1.connector2 unless glue1.nil? return glue2.connector1 unless glue2.nil? end end