I would like to selectively reuse some data. I have two groups of people who want very similar information about subject experts - but they want slightly different fields and/or want to see the other group''s information but should not be able to edit it. If I create the following models, don''t the child models have access to all the parent''s attributes (unless I override the attribute accessors individually)? class Expert < ActiveRecord::Base # has fields like name, email, title, expertise_according_to_group1, expertise_according_to_group2 end class Group1_Expert < Expert # If I did this, this model would have access to all fields in Expert, right? Including the group2 fields end I could do what I want by just ignoring the group2 fields when showing the expert to group1, but that feels kind of ummm unclean. One can use database views to provide access controls on the underlying table. I would like to do essentially the same thing in Ruby/Rails, but I don''t know how.
No, for models you would have to do this: class Expert < ActiveRecord::Base self.abstract_class = true end class YourChildClass < Expert # Inherits from Expert end -- Posted via http://www.ruby-forum.com/.
Älphä Blüë wrote:> No, for models you would have to do this: > > class Expert < ActiveRecord::Base > self.abstract_class = true > end > > class YourChildClass < Expert > # Inherits from Expert > endIt is also a good practice to set the table names in the inherited models by doing: class YourChildClass < Expert set_table_name "your_child_classes" end Make sure you pluralize the table name.. -- Posted via http://www.ruby-forum.com/.
On Jul 11, 11:19 pm, cnk <cynthia.ki...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I would like to selectively reuse some data. I have two groups of > people who want very similar information about subject experts - but > they want slightly different fields and/or want to see the other > group''s information but should not be able to edit it. > > If I create the following models, don''t the child models have access > to all the parent''s attributes (unless I override the attribute > accessors individually)? > > class Expert < ActiveRecord::Base > # has fields like name, email, title, expertise_according_to_group1, > expertise_according_to_group2 > end > > class Group1_Expert < Expert > # If I did this, this model would have access to all fields in Expert, > right? Including the group2 fields > end > > I could do what I want by just ignoring the group2 fields when showing > the expert to group1, but that feels kind of ummm unclean.That is the drawback with single table inheritance, unless your subclasses have almost all of their data in common it gets a little icky. One approach is to move the data that is not common in to a separate set of tables (with the appropriate relationships) Fred> > One can use database views to provide access controls on the > underlying table. I would like to do essentially the same thing in > Ruby/Rails, but I don''t know how.
It''s not really practical to provide "access control" at the Ruby source code level. I''d hope that you''re not giving your users access to run code on the server, so this is really just a UI issue. --Matt Jones On Jul 11, 6:19 pm, cnk <cynthia.ki...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I would like to selectively reuse some data. I have two groups of > people who want very similar information about subject experts - but > they want slightly different fields and/or want to see the other > group''s information but should not be able to edit it. > > If I create the following models, don''t the child models have access > to all the parent''s attributes (unless I override the attribute > accessors individually)? > > class Expert < ActiveRecord::Base > # has fields like name, email, title, expertise_according_to_group1, > expertise_according_to_group2 > end > > class Group1_Expert < Expert > # If I did this, this model would have access to all fields in Expert, > right? Including the group2 fields > end > > I could do what I want by just ignoring the group2 fields when showing > the expert to group1, but that feels kind of ummm unclean. > > One can use database views to provide access controls on the > underlying table. I would like to do essentially the same thing in > Ruby/Rails, but I don''t know how.