I''m creating a booking engine for personal trainers to make bookings with their clients. Each booking has_one workout template which in turn has_many exercises. When the personal trainer creates the booking I''d like them to be able to edit the associated workout template as a completely fresh instance of the template. My current thinking is to use the vestal_versions[1] or paper_trail[2] gem to make each booking a new version of the workout. I imagine I would then reference either the version.id, updated_by or updated_at in order to find the version in the future. How far off the right approach am I? Is there a pattern I should be digging into to understand this problem better? I''m sure you can tell I''m new to Ruby/Rails and programming and any help would be greatly appreciated. [1] https://github.com/laserlemon/vestal_versions [2] https://github.com/airblade/paper_trail -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 24, 2012, at 1:31 AM, Vladiim wrote:> I''m creating a booking engine for personal trainers to make bookings > with their clients. > > Each booking has_one workout template which in turn has_many > exercises. > > When the personal trainer creates the booking I''d like them to be able > to edit the associated workout template as a completely fresh instance > of the template. > > My current thinking is to use the vestal_versions[1] or paper_trail[2] > gem to make each booking a new version of the workout. I imagine I > would then reference either the version.id, updated_by or updated_at > in order to find the version in the future.I haven''t used Paper Trail, but Vestal Versions uses a version attribute (integer) to track what version you''re currently at. It also allows you to step back and forth through that trail. I don''t really think this matches up with your metaphor. (As an aside, VV stores these versions as YAML, so they''re not particularly searchable or available for statistical analysis.)> > How far off the right approach am I? Is there a pattern I should be > digging into to understand this problem better?You might want to look at nested resources for this. A workout could have many exercises. A new workout could be created with a set number (and type) of exercises in it (either hard-coded in the controller or following a template of some sort), and then you could remove some, add some others, as needed. The workout then becomes the master record -- I would say that it belongs to the trainer and it also belongs to the trainee, and it has a specific date when it took place. That way you can look at statistics in fairly fine-grained detail later, and track the number of instances of a particular exercise, etc.> > I''m sure you can tell I''m new to Ruby/Rails and programming and any > help would be greatly appreciated.You are welcome. Everyone here was a newbie once. Walter> > [1] https://github.com/laserlemon/vestal_versions > [2] https://github.com/airblade/paper_trail > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Excellent advice... I''m a fan of your idea of having nested resources as I had a fear of massive versioning tables with my original approach. I''ll give this a G-O. On Jan 25, 1:18 am, Walter Lee Davis <wa...-HQgmohHLjDZWk0Htik3J/w@public.gmane.org> wrote:> On Jan 24, 2012, at 1:31 AM, Vladiim wrote: > > > I''m creating a booking engine for personal trainers to make bookings > > with their clients. > > > Each booking has_one workout template which in turn has_many > > exercises. > > > When the personal trainer creates the booking I''d like them to be able > > to edit the associated workout template as a completely fresh instance > > of the template. > > > My current thinking is to use the vestal_versions[1] or paper_trail[2] > > gem to make each booking a new version of the workout. I imagine I > > would then reference either the version.id, updated_by or updated_at > > in order to find the version in the future. > > I haven''t used Paper Trail, but Vestal Versions uses a version attribute (integer) to track what version you''re currently at. It also allows you to step back and forth through that trail. I don''t really think this matches up with your metaphor. (As an aside, VV stores these versions as YAML, so they''re not particularly searchable or available for statistical analysis.) > > > > > How far off the right approach am I? Is there a pattern I should be > > digging into to understand this problem better? > > You might want to look at nested resources for this. A workout could have many exercises. A new workout could be created with a set number (and type) of exercises in it (either hard-coded in the controller or following a template of some sort), and then you could remove some, add some others, as needed. The workout then becomes the master record -- I would say that it belongs to the trainer and it also belongs to the trainee, and it has a specific date when it took place. That way you can look at statistics in fairly fine-grained detail later, and track the number of instances of a particular exercise, etc. > > > > > I''m sure you can tell I''m new to Ruby/Rails and programming and any > > help would be greatly appreciated. > > You are welcome. Everyone here was a newbie once. > > Walter > > > > > > > > > > > [1]https://github.com/laserlemon/vestal_versions > > [2]https://github.com/airblade/paper_trail > > > -- > > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > For more options, visit this group athttp://groups.google.com/group/rubyonrails-talk?hl=en.-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.