New to Ruby on Rails - Assigning variation (like size or color) to products

Hey Everyone,

I'm completely new to ruby. I'm building my 1st little app to aid the
learning process (nothing like learning by doing) and to support
others who want to raise a little seed money to fund traction efforts
without equity or debt strings attached I'm plugging away trying to
learn the basics of Rails for the last couple of weeks and have
realized that I simply to don't know enough Ruby, to truly build what
I'm trying to build.

I need help with two things:

#1 - Can you all recommend your Top 3 "must have" books that will help
me become more proficient with in the actual language of ruby and ruby
recipes. Suggestions on books that aid in exploring Active Record in
depth would also be humbly appreciated.

#2 - As mentioned, I'm building a little store. I'm trying to allow
users to select a unique size for the t-shirt. I'm using version 3.2.1

    I've created a model called product_variation and tried to use the
new 'store' -- i.e., for declaring simple
single-column key/value stores (which I think is new in 3.2.1)
    THEN I even an entire whole scaffold, called product_instance - to
sit between product & line_item to attempt to create a "special
instance of the product" (i.e., category -> product ->
product_instance -> line_item -> cart -> order).

No luck in making the actual connection. I know this has EVERYTHING to
do with me being new to the language, but If could get a little
guidance on how to resolve this it would be extremely appreciated.

    GIT HUB: Here is my git hub link
(the tag for the sizes is there but the logic behind it is blowing up)
    HEROKU: Here is yesterday's version of the site on heroku (made a
few adjustments but just so that you have a visual)

Again, Thanks in advance for the help

Sincere Regards,

Hi Kisha,

I'm new to Rails too so my answer my not be perfect, but here's a try

I think you're overcomplicated the Product model with
product_instance. To allow each Product to have different size options
I would look into storing serialized data in your "products" table in
a column called something like "variations". For more info on
serializing data and storing it in the DB have a read of
- hopefully that'll help!

Good luck,

Have you worked right through a good tutorial such as (which is free to use online)? For any tutorial
make sure you are using the version of rails the tutorial is designed



It's important to get your model right in your head first if that's the way you're doing it (and it seems you are).

So, in your case, the items are:
1. A catalogue-like product that doesn't exist, but represents the product under question (much like a class is to an object). An Abstract Product if you will. For example, "Ford Festiva" as a class of things would be one of these.
2. An actual product. A Concrete Product if you will. This would be a particular Ford Festiva which has some special options about it : maybe the air con option, and it is in red, with hotted up wheels. (ie a particular configuration)
3. A LineItem which represents one single item on an invoice, and links to the particular item (ie the concrete product).
4. An Invoice which has many line items

My next comment would most likely be that if you're a total noob, this is a very complicated thing to start with.

Second - the books? I'd recommend The Ruby way. Are you a beginning programmer or just a beginning rubyist?


Top 3 book for Rails/Ruby Development

1. The Ruby Programming Language by David Flanagan & Yukihiro Matsumoto
1. Programming Ruby 1.9 (3rd edition): The Pragmatic Programmers' Guide
by by Dave Thomas, with Chad Fowler and Andy Hunt

2. The Rails Way by Obie Fernandez

3. Beginning Ruby: From Novice to Professional by Peter Cooper

Also check they have a free ruby and free rails course, has many free higher level rails screencast & has several rails guides

If you are new to programming in general then try searching for
information regarding
Object-oriented programming

if I understand you correctly just create a size variable for the
product model or (this is where oop comes in) create a tshirt class
which would inherit from the product class and give the tshirt class a
size variable to be customized in the view.

Hope this all helps

Hey Eric,

Thanks for the book recommedations - I will definitely pick all if them up.

Will also try your solutions for adding a variant, per instructions below.

Again, thanks for the help!
It is much appreciated.