My first app. How should I approach this association thing?

Hi people. I’m a newbie so bare with me :stuck_out_tongue:

This is my first rails application: https://github.com/Agis-/ehm . It’s an app where visitors have the ability to see Offers submitted from Vendors. These Offers also belong to Categories. So Offers, Vendors and Categories are the models & resources in my application.

Until now I implemented these pages:

  • list all Offers (app.com)
  • all Offers from a certain Vendor (app.com/v/)
  • all Offers from a certain Category (app.com/c/)
    and now the important part: I want in the vendor pages (app.com/v/) where all the Vendor’s offers are listed, to have a sidemenu which will have all the Vendor’s offers grouped by categories. So the visitor will be able not only to see all the Offers from Vendor A, but all the Offers from Vendor A and in Category A, B or C.

Thing is, I don’t know how to generally approach this issue. How should I route this? Should I add a sidebar partial template that will render the category menu? Should the routes be like app.com/v//c/? or maybe I should use query parameters like app.com/v/?category=?

What would be the Rails way of doing this?

Thanks:D

Also, what about the controllers? Would I need all of them? Right now I have 3.

I’m just thinking now, maybe the whole approach (following the RESTful architecture) isn’t the best choice for my app. Could I maybe do something like app.com/?vendor=blah&category=blah.

Since you are very new to Rails, I would suggest that you take a an hour or two to go through a three step approach to gather the knowledge you’ll need to answer this yourself.

  1. Use the Rails scaffolding feature to build out the models, controllers, views and tests for each of your models. A lot of this code you will end up not using and/or modifying heavily, but it gives you a place to start and should help you to get more comfortable with the “restful” approach. (http://guides.rubyonrails.org/getting_started.html#getting-up-and-running-quickly-with-scaffolding)

  2. Identify the ActiveRecord relationships you will need between your models. Implement those model relationships. (http://guides.rubyonrails.org/association_basics.html#the-types-of-associations) Use IRB to build some records and test model relationships. (http://guides.rubyonrails.org/command_line.html#rails-console ) Establish queries/scopes in your models, and test them also in IRB. ( http://guides.rubyonrails.org/active_record_querying.html#scopes )

  3. Implement the routes and nesting that make sense now that your models and relationships are established. (http://guides.rubyonrails.org/routing.html#nested-resources , http://railscasts.com/episodes/196-nested-model-form-part-1) Based on the relationships/routing/nesting you implement, you will see what controllers and views you will need to build out.

When I am starting a new, complex project, I will oftentimes go through this three step process two or three times, taking a slightly different approach to the models, relationships, queries, and routes each time. This allows me to see where the advantages and disadvantages to each approach pop-up. It is usually in this process where I end up answering the types of questions that you asked below.

My apologies if this seems a little elementary (and I did not explicitly answer your questions,) but this is the approach I find useful with Rails’ tools. Hope this helps.