Hello all and hoping for some insight a project manger type of application, staff are assigned to projects, but each staff has varied roles for different projects... STI does not seem to be applicable here Imagine a table staffs... id int name varchar blah.... is_manager int 1 is_engineer int 1 is_producer int 1 and projects... id name manager_id engineer_id producer_id how is the best way to subclass manager, engineer, and producer from class:staff?? cheers -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Cam,
I dealt with a similar problem recently and ended up creating one AR
table with a series of boolean flags to indicate if the object was a
member of a particular child class. Just like your example I wanted
the ability for child objects from different classes to inherit from
a single parent class.
Here is a rough idea of what I did:
class Staff < ActiveRecod::Base
# connected to the one table where all data is stored
# add one boolean column for each subclass
end
class Manager < Staff
def initialize(attributes = nil)
# set is_manager to true for all new objects
super(:is_manager => true)
self.attributes = attributes unless attributes.nil?
end
class << self
def find(*args)
self.with_scope(:find => {:conditions =>
["staff.is_manager=?",true]}) do
super
end
end
end
end
Then just repeat the above for your engineer and producer classes.
There are some problems with this approach. The rails paginator
still counts the number of records in the base class. I think this
can be solved by overriding the method that determines the number of
records. Another problem is that the scoped find does not catch
calls to the various find convenience methods that rails provides.
I am very interested to hear how other people have solved this problem.
Aaron
On Sep 24, 2006, at 7:55 PM, Cam wrote:
>
> Hello all and hoping for some insight
>
> a project manger type of application, staff are assigned to projects,
> but each staff has varied roles for different projects... STI does not
> seem to be applicable here
>
> Imagine a table staffs...
> id int
> name varchar
> blah....
> is_manager int 1
> is_engineer int 1
> is_producer int 1
>
> and projects...
> id
> name
> manager_id
> engineer_id
> producer_id
>
> how is the best way to subclass manager, engineer, and producer from
> class:staff??
>
> cheers
>
>
> --
> Posted via http://www.ruby-forum.com/.
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---
On 9/24/06, Cam <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > Hello all and hoping for some insight > > a project manger type of application, staff are assigned to projects, > but each staff has varied roles for different projects... STI does not > seem to be applicable hereSeems to me you''ve solved your own question. Staff (or "people") is a many-many with projects, with the join table also acting as a role identifier. Since your join here has attributes of its own (the role), probably a has_many :through makes more sense. Something along the lines of: class Person < AR has_many :projects, :through => roles ... It might get interesting if you allow a person to have MULTIPLE roles on a project though. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
> > It might get interesting if you allow a person to have MULTIPLE roles > on a project though.Precisely the problem. MMMmmmm I''m stumped.....for a nOOb -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---