ok... I do not know what a 'STI based model' is. And I do not see your SecondParty class here. Pretty sure the matter of second-party can be managed in Party with a field like is_second_party. Don't understand necessity of Classes Organization and Person
Addressing from what I understand: class Party < ActiveRecord::Base has_many :party_relationships scope :organizations, -> { where(type: 'Organization') } ## Haven't tested scope :people, -> { where(type: 'Person') } ## Haven't tested ## one to many party to types ## SQL table parties should contain field 'types' ## rails generate migration add_type_to_parties type:string ## rake db:migrate ## <%= form_for @party .. do |f| %> ## <%= f.collection_select :type, Party::TYPES, :to_s, :humanize %> TYPES = %w[Organization Person] end class PartyRelationship < ActiveRecord::Base belongs_to :party ## http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html ## Declare an enum attribute where the values map to integers in the database, but can be queried by name. So table PartyRelationship must ## contain field relation enum relation: [ :customer, :supplier, :employee, :reseller ] ## eg, corresponding database values : 1:customer, 2:supplier, 3:employee, 4:reseller ## With regard to CRUD, obviously the enum is hard-coded. Pretty sure that all will need to be done manually and very carefully as to respect values ## already stored on the database ## With regard to PartyRelationship Controller, record using relation, you will have to be mindful of your enum structure, eg, order ## Find ## irb(main):003:0> PartyRelationship.find(1).relation ## PartyRelationship Load (1.0ms) SELECT `party_relationships`.* FROM `party_relationships` WHERE `party_relationships`.`id` = 1 LIMIT 1 ## => "supplier" ## update ## irb(main):008:0> PartyRelationship.find(1).update(relation: 3) ## PartyRelationship Load (0.0ms) SELECT `party_relationships`.* FROM `party_relationships` WHERE `party_relationships`.`id` = 1 LIMIT 1 ## (0.0ms) BEGIN ## SQL (13.0ms) UPDATE `party_relationships` SET `relation` = 3, `updated_at` = '2015-08-25 14:00:58' WHERE `party_relationships`.`id` = 1 ## (1.0ms) COMMIT ## => true end Hope this helps... -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-talk@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/465ee52d-6771-47f4-b8d8-94aca2cbe388%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.