Вложенные маршруты — Ruby on Rails

Я пытаюсь получить вложенный маршрут, например "project/:project_id/task/:task_id", но мне не повезло. Я настроил свой файл маршрутов следующим образом:

    Rails.application.routes.draw do

  get 'sessions/create'

  devise_for :users, path: '', path_names: { sign_up: 'users/sign_up'}


  get 'teams/sign_up' => 'teams#new', as: 'new_team'
  get 'teams/:id/users/:user_id' => 'teams#users_index'
  get 'teams/:team_id/users/:id/complete' => 'users#show_complete', as: 'user_complete'

  get 'projects/:id/tasks', to: 'projects#tasks_index'
  get 'projects/:id/tasks/:id', to: 'tasks#show'

  get 'teams/:id/projects/new' => 'projects#new', as: 'new_project'
  post 'teams/:id/projects' => 'projects#create', as: 'projects'

  root 'static#index', as: 'root'

  get '/auth/twitter/callback' => 'sessions#create'

 #resources :tasks do 
  #member do
   # get :toggle_status
  #end
#end

  resources :projects do
    resources :tasks, except: [:index], controller: 'projects/tasks'
  end

  resources :users, only: [:show]
  resources :teams, except: [:new]


end

Но я продолжаю получать сообщение об ошибке с моей ссылкой в ​​файле project.show.html, которая настроена следующим образом:

<h2><%= @project.name %></h2>
        <%= form_for @task do |f| %>
        <%= f.hidden_field :project_id, value: @project.id %>
        <%= f.hidden_field :user_id, value: current_user.id %>
        <%= f.label :notes %>: <%= f.text_field :notes %>
        <%= f.submit "Add Task" %>
    <% end %>

<% if @project.tasks.any? %>
  <table class="table">
    <tr>
      <th>Task</th>
    </tr>
    <% @project.tasks.each do |task| %>
      <tr>
        <td>
          <%= link_to task.notes %>
          <%= task.status %>
        </td>
        <td>
        <% if !task.id.nil? %>

            <%= link_to "Change Status", toggle_status_task_path(task) %>
        <% end %>
        </td>
      </tr>
    <% end %>

  </table>
<% end %>


<%= link_to "Edit Project", edit_project_path(@project) %> | <%= link_to "Delete Project", project_path(@project), method: :delete %>

Я знаю, что должен добавить путь после "‹%= link_to task.notes %>", и я запустил rake:routes и попробовал множество моих вариантов, но все они генерируют ошибку URI.

Я не уверен, что это то, как я написал свои ресурсы в маршрутах или что. Может ли кто-нибудь с опытом работы с вложенными маршрутами (в Ruby on Rails), пожалуйста, помочь мне? Я участвую в одном из тех онлайн-курсов по программированию, и даже инструкторы были немного сбиты с толку.


person James    schedule 19.07.2018    source источник


Ответы (2)


Можете ли вы попробовать изменить этот get 'projects/:id/tasks/:id', to: 'tasks#show' на get 'projects/:id/tasks/:id', to: 'tasks#show, as: 'project_task'.

И, на ваш взгляд, <%= link_to task.notes, project_task_path(@project,task) %> Надеюсь, это поможет.

person Mehmet Adil İstikbal    schedule 19.07.2018

Вы бы сделали это

<%= link_to task.notes, [@project, task] %>

Этот массив будет использоваться для создания URL-адреса на основе имен моделей и идентификаторов элементов в массиве (дополнительную информацию см. в полиморфных маршрутах).

projects/:project_id/tasks/:id

Кстати, он вам также понадобится для формы

form_for [@project, @task] ...
person Mark Swardstrom    schedule 19.07.2018