#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
. Вам нужно извлечь запись пользователя, чтобы получить идентификатор пользователя, поскольку это внешний ключ в таблице проектов.