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.

Reply via email to