Ruby on Rails
Sunday, August 23, 2015
Sorry, Leandro, but I do not agree with you. However I may not understand what you have offered. Just seems to me that the solution is model-drive. Where in the Party and PartyRelationship controller aspects of CRUD can be managed in building respective association calls. Like << to create, .destroy to delete, etc.. Maybe at a maintenance level Role/Customer and CustomerType/Supplier Controllers would be appropriate
(Forgive I am writing quickly)
I would suggest a model structure like the following:
class Party < ActiveRecord::Base
has_many :party_relationships
has_many :roles
end
class Role < ActiveRecord::Base
belongs_to :party_relationship
end
class CustomerType < ActiveRecord::Base
belongs_to :party_relationship
end
class PartyRelationship < ActiveRecord::Base
belongs_to :party
## customer, supplier, reseller
scope :customer, -> { where(customer_type_id: 1) } ## id values are specific as to new table/record creation and to my seed below
scope :supplier, -> { where(customer_type_id: 2) }
scope :reseller, -> { where(customer_type_id: 3) }
has_many :customer_types
end
Offering seed.rb
## Assuming you are starting anew
unless Party.count > 0
Party.create!(name: 'Person#1', role_id: 2 ) ## id: 1
Party.create!(name: 'Person#2', role_id: 2 ) ## id: 2
Party.create!(name: 'Vendor#1', role_id: 3 ) ## id: 3
Party.create!(name: 'Vendor#2', role_id: 3 ) ## id: 4
Party.create!(name: 'Company#1', role_id: 1 ) ## id: 5
Party.create!(name: 'Company#2', role_id: 1 ) ## id: 6
end
unless PartyRelationship.count > 0
PartyRelationship.create!(party_id: 1, customer_type_id: 1 ) ## Person 1 is an Person that is a customer
PartyRelationship.create!(party_id: 2, customer_type_id: 2 ) ## Person 2 is an Person that is a supplier
PartyRelationship.create!(party_id: 3, customer_type_id: 3 ) ## Vendor 1 is an Companu that is a reseller
PartyRelationship.create!(party_id: 4, customer_type_id: 1 ) ## Vendor 2 is an company that is a customer
PartyRelationship.create!(party_id: 5, customer_type_id: 2 ) ## Company 1 is an organization that is a supplier
PartyRelationship.create!(party_id: 6, customer_type_id: 3 ) ## Company 2 is an organization that is a reselller
end
PartyRelationship.create!(party_id: 1, customer_type_id: 2 ) ## Person 1 is an Person that is a supplier
unless Role.count > 0
Role.create!(role_name: 'Organization')
Role.create!(role_name: 'Person')
Role.create!(role_name: 'Company')
end
unless CustomerType.count > 0
CustomerType.create!(name: 'customer')
CustomerType.create!(name: 'supplier')
CustomerType.create!(name: 'reseller')
end
And migration:
create_table "parties", force: :cascade do |t|
t.integer "role_id", limit: 4
t.string "name", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "party_relationships", force: :cascade do |t|
t.integer "party_id", limit: 4
t.integer "customer_type_id", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "roles", force: :cascade do |t|
t.string "role_name", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "customer_types", force: :cascade do |t|
t.string "name", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Then you should be able to make association calls like
Party.find(1).party_relationships.customer
There may be many errors here, but the spirit is that one can perform CRUD given the Party and PartyRelationship model through their respective controllers..... FORGIVE me if I am wrong.
Liz
On Sunday, August 23, 2015 at 4:40:25 PM UTC-4, Marco Antonio Almeida wrote:
-- (Forgive I am writing quickly)
I would suggest a model structure like the following:
class Party < ActiveRecord::Base
has_many :party_relationships
has_many :roles
end
class Role < ActiveRecord::Base
belongs_to :party_relationship
end
class CustomerType < ActiveRecord::Base
belongs_to :party_relationship
end
class PartyRelationship < ActiveRecord::Base
belongs_to :party
## customer, supplier, reseller
scope :customer, -> { where(customer_type_id: 1) } ## id values are specific as to new table/record creation and to my seed below
scope :supplier, -> { where(customer_type_id: 2) }
scope :reseller, -> { where(customer_type_id: 3) }
has_many :customer_types
end
Offering seed.rb
## Assuming you are starting anew
unless Party.count > 0
Party.create!(name: 'Person#1', role_id: 2 ) ## id: 1
Party.create!(name: 'Person#2', role_id: 2 ) ## id: 2
Party.create!(name: 'Vendor#1', role_id: 3 ) ## id: 3
Party.create!(name: 'Vendor#2', role_id: 3 ) ## id: 4
Party.create!(name: 'Company#1', role_id: 1 ) ## id: 5
Party.create!(name: 'Company#2', role_id: 1 ) ## id: 6
end
unless PartyRelationship.count > 0
PartyRelationship.create!(party_id: 1, customer_type_id: 1 ) ## Person 1 is an Person that is a customer
PartyRelationship.create!(party_id: 2, customer_type_id: 2 ) ## Person 2 is an Person that is a supplier
PartyRelationship.create!(party_id: 3, customer_type_id: 3 ) ## Vendor 1 is an Companu that is a reseller
PartyRelationship.create!(party_id: 4, customer_type_id: 1 ) ## Vendor 2 is an company that is a customer
PartyRelationship.create!(party_id: 5, customer_type_id: 2 ) ## Company 1 is an organization that is a supplier
PartyRelationship.create!(party_id: 6, customer_type_id: 3 ) ## Company 2 is an organization that is a reselller
end
PartyRelationship.create!(party_id: 1, customer_type_id: 2 ) ## Person 1 is an Person that is a supplier
unless Role.count > 0
Role.create!(role_name: 'Organization')
Role.create!(role_name: 'Person')
Role.create!(role_name: 'Company')
end
unless CustomerType.count > 0
CustomerType.create!(name: 'customer')
CustomerType.create!(name: 'supplier')
CustomerType.create!(name: 'reseller')
end
And migration:
create_table "parties", force: :cascade do |t|
t.integer "role_id", limit: 4
t.string "name", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "party_relationships", force: :cascade do |t|
t.integer "party_id", limit: 4
t.integer "customer_type_id", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "roles", force: :cascade do |t|
t.string "role_name", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "customer_types", force: :cascade do |t|
t.string "name", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Then you should be able to make association calls like
Party.find(1).party_relationships.customer
There may be many errors here, but the spirit is that one can perform CRUD given the Party and PartyRelationship model through their respective controllers..... FORGIVE me if I am wrong.
Liz
On Sunday, August 23, 2015 at 4:40:25 PM UTC-4, Marco Antonio Almeida wrote:
Hi Leandro,I would go for two controllers here. A CustomersController and a SuppliersController. You would just need to handle the Party model appropriately in each one of those controllers.Best regards,// MarcoOn Sat, Aug 22, 2015 at 10:59 PM Leandro França <leandroay...@gmail.com> wrote:Hi there everyone,--
I have a tradicional "Party/Role Model" in my app:
- Party ( an organization, a person, etc)
- PartyRelationship ( One or more relationships between parties. They can have relationship types: customer, supplier, reseller, etc)However, I need to create two "shorcuts" :
- one to customers CRUD and- one to suppliers CRUD , even if they´re actually both "parties" behind the scenes.
I´d like to show on my navigation menu:1) A "Customers" link routing to the customer crud. (Actually, the party CRUD, knowing ahead it would be dealing with a "customer" party relationship)2) A "Supplier" link routing to the supplier crud. (Actually, the same party CRUD, knowing ahead it would be dealing with a "customer" party relationship)These links will also need to filter the parties being listed, based on their relationship types.
What´s the recommended approach to this?
Thanks in advance!Regard.
Leandro
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-ta...@googlegroups.com .
To post to this group, send email to rubyonra...@googlegroups.com .
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ .8d2660cd-1d4a-47b7-9425- c903c56a4bf6%40googlegroups. com
For more options, visit https://groups.google.com/d/optout .
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/5f60d14d-3181-4ed5-a047-ab325e6c601d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment