Как мне настроить свои маршруты так, чтобы они действовали как структура каталогов github?

#ruby-on-rails #routes

#ruby-on-rails #маршруты

Вопрос:

Я хотел бы настроить свою структуру каталогов так, как у github:

website.com/user_name/project_name будут проекты#show action.

Как я могу это сделать, используя мой файл маршрутов?

Итак website.com/user_name это будет действие projects#index.

Спасибо

Ответ №1:

Во-первых, маршрут.

 match ":username" => "projects#index"
match ":username/:project_name" => "projects#show"
  

Затем контроллер.

 class ProjectsController < ApplicationController
  def index
    @user = User.find_by_username!(params[:username])
    @projects = @user.projects
  end

  def show
    @user = User.find_by_username!(params[:username])
    @project = @user.projects.find_by_project_name!(params[:project_name])
  end
end
  

Все просто!

Комментарии:

1. Небольшая критика: в Rails 3 вам может сойти с рук просто projects#index , а не ProjectsController#index .

2. Спасибо! как насчет того, когда я использую link_to … как мне вызвать обе эти ссылки?

3. кроме того, в projectscontroller#index я не хочу перечислять пользователей, а хочу перечислить проекты этого пользователя. Это все еще правильный способ сделать это?

4. Tnx Ryan, исправлено. Мэтью, да, это так. Вы, вероятно, хотите сказать @projects = @user.projects . Вам нужно извлечь запись пользователя, чтобы получить идентификатор пользователя, поскольку это внешний ключ в таблице проектов.