Thanks Elizabeth, >From STI, I mean I´m using Single Table Inheritance <http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html> , since Person and Organization have many fields in common (name, addresses, etc) , but some specific behaviors to be implemented in the future. The SecondParty just maps the related party association on PartyRelationship. Its is self-referential association <http://guides.rubyonrails.org/association_basics.html#self-joins>.
I´ll check your suggestions on enum field and relationship controller. Looks like the´ll help. Thanks again, Leandro 2015-08-25 12:19 GMT-03:00 Elizabeth McGurty <emcgur...@gmail.com>: > 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/CAAt6bOqYinx8jPEzEYX8043q_OD38btZ9PjNxtOgpFV_csdD7g%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.