Skip to main content

ruby on rails nested model relationship and routes

Rails • Asked by Qasem Hajizadeh

I have these models: Sport, Country, League and Match
Also I do have SportsController, CountriesController, LeaguesController and MatchsController

So the question is:
1: how i can set relation between models ?
2: how i can set routs like this

sport/sport_id(slug)/country_id(slug)/league_id(slug)/match_id

sports/soccer/england/premier-league/52346

Note : all of the countries don't have all sports for example Soccer Sport exist in all countries but volleyball exist in some countries


For 1. have a look at many-to-many relationship. With Rails this can be done like follows:
Sport.rb
has_many: :country_sports
has_many: sports, through: :country_sports

Country.rb
has_many :country_sports
has_many :sports, through: :country_sports

CountrySport.rb
belongs_to :sport
belongs_to :country

The last model is the one that connects the Sport and Country model and for the bare minimum only need country_id and sport_id.

For 2, you can nest the routes like follows:
resources :sports do
resources :country do
resources :leagues do
resources :matches
end
end
end

This is the gist of it, so feel free if you have specific issues with this.


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 22,346+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.