Ruby on Rails
Wednesday, August 26, 2015
Check out 'super' on inheritance from Parent Model Class.
On Tuesday, August 25, 2015 at 10:48:57 PM UTC-4, Leandro França wrote:
-- On Tuesday, August 25, 2015 at 10:48:57 PM UTC-4, Leandro França wrote:
Thanks Elizabeth,
From STI, I mean I´m using Single Table Inheritance , 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.
I´ll check your suggestions on enum field and relationship controller.
Looks like the´ll help.Thanks again,
Leandro2015-08-25 12:19 GMT-03:00 Elizabeth McGurty <emcg...@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+unsubscribe@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/d7bc6b81-e5d3-47bd-9daa-ce630d0bbabc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment