Ruby on Rails: NoMethodError в статьях#Show

Я делаю учебник по http://guides.rubyonrails.org/getting_started.html, создание блога с использованием Rails 5 и Ruby 2.4. После копирования и вставки моего пути до конца Unit-6: добавление модели комментариев Rails выдал эту ошибку:

"NoMethodError in Articles#Show":undefined method `article_comments_path' for #<#

<h2>Add a comment:</h2>
<%= form_for([@article, @article.comments.build]) do |f| %><!--****Error?****-->

A Stackoverflow answer from Oct. 26, 2014 says to add an article_comments_path helper method to routes.rb like this:

resources :articles do
  resources :comments
end

Но с тех пор синтаксис, похоже, немного изменился.

Мой route.rb выглядит так:

Rails.application.routes.draw do
    resources :articles
    resources :comments#This creates comments as a nested resource within articles.
    root 'welcome#index'
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Я не нашел никаких орфографических ошибок, введенных в терминал, поэтому я не совсем уверен, как действовать дальше. Любое руководство приветствуется.

Мои грабли маршруты | вывод комментариев grep:

comments GET    /comments(.:format)          comments#index
         POST   /comments(.:format)          comments#create

new_comment GET /comments/new(.:format) comments#new edit_comment GET /comments/:id/edit(.:format) comments#edit comment GET /comments/:id(.:format) comments#show PATCH /comments/ :id(.:format) comments#update PUT /comments/:id(.:format) comments#update DELETE /comments/:id(.:format) comments#destroy

и мой вывод rake routes:

     Prefix Verb   URI Pattern                  Controller#Action
    articles GET    /articles(.:format)          articles#index
             POST   /articles(.:format)          articles#create
 new_article GET    /articles/new(.:format)      articles#new
edit_article GET    /articles/:id/edit(.:format) articles#edit
     article GET    /articles/:id(.:format)      articles#show
             PATCH  /articles/:id(.:format)      articles#update
             PUT    /articles/:id(.:format)      articles#update
             DELETE /articles/:id(.:format)      articles#destroy
    comments GET    /comments(.:format)          comments#index
             POST   /comments(.:format)          comments#create
 new_comment GET    /comments/new(.:format)      comments#new
edit_comment GET    /comments/:id/edit(.:format) comments#edit
     comment GET    /comments/:id(.:format)      comments#show
             PATCH  /comments/:id(.:format)      comments#update
             PUT    /comments/:id(.:format)      comments#update
             DELETE /comments/:id(.:format)      comments#destroy
        root GET    /                            welcome#index

Любые проблемы?


person Cody B. Coding    schedule 12.01.2017    source источник
comment
Просто проверьте свои маршруты на наличие comments, запустив в терминале команду rake route | grep комментарии'   -  person Salil    schedule 12.01.2017
comment
Синтаксис остается прежним для вложенных маршрутов. Какой метод он пытается вызвать?   -  person j-dexx    schedule 12.01.2017
comment
Мои рейк-маршруты | вывод комментариев grep: edit(.:format) comments#редактировать комментарий GET /comments/:id(.:format) comments#show PATCH /comments/:id(.:format) comments#update PUT /comments/:id(.:format) комментарии #update УДАЛИТЬ /comments/:id(.:format) comments#destroy   -  person Cody B. Coding    schedule 12.01.2017


Ответы (2)


По крайней мере, согласно http://guides.rubyonrails.org/routing.html#nested-resources

Вам еще нужно сделать

resources :articles do
  resources :comments
end

Какую ошибку вы получаете, когда устанавливаете это? Также попробуйте перезапустить сервер.

person Coolness    schedule 12.01.2017
comment
Я получил ту же ошибку и, проверив это, увидел, что пропустил этот шаг. Спасибо. - person nilsandrey; 07.03.2020

В соответствии с предоставленными вами документами вы должны использовать блок для вложенных маршрутов:

Rails.application.routes.draw do
resources :articles do
  resources :comments
end
root 'welcome#index'

Ruby не знает об этом отступе, поэтому ваш хорошо отформатированный код выглядит так:

Rails.application.routes.draw do
  resources :articles
  resources :comments#This creates comments as a nested resource within articles.
  root 'welcome#index
end

Редактировать: вы всегда можете проверить свои маршруты в cli с помощью rake routes

person schnika    schedule 12.01.2017
comment
Мой отступ в route.rb похож на ваш пример, и мои рейк-маршруты, кажется, соответствуют правильно. - person Cody B. Coding; 12.01.2017
comment
Ok. Просто делайте то, что говорят документы (см. мой первый блок кода), и все готово :) - person schnika; 12.01.2017