Вы можете запустить "маршруты рейка", чтобы проверить, что rails думает о ваших маршрутах и какие URL будут отправлены на какие контроллеры.
В вашем случае я получаю:
home_index GET /home(.:format) {:action=>"index", :controller=>"home"}
home_index POST /home(.:format) {:action=>"create", :controller=>"home"}
new_home GET /home/new(.:format) {:action=>"new", :controller=>"home"}
edit_home GET /home/:id/edit(.:format) {:action=>"edit", :controller=>"home"}
home GET /home/:id(.:format) {:action=>"show", :controller=>"home"}
home PUT /home/:id(.:format) {:action=>"update", :controller=>"home"}
home DELETE /home/:id(.:format) {:action=>"destroy", :controller=>"home"}
Итак, чтобы перейти к действию index, вам нужно перейти в "/ home". Если вы перейдете в «/ home / index», он будет думать, что «index» - это идентификатор ресурса, отправляя его в действие show.
Однако в Rails принято использовать множественные имена для контроллеров и присваивать им имена после ресурса, который они представляют (обычно это модель, но это не обязательно). Поэтому в вашем случае имя контроллера должно быть «ArticlesController», а ваш route.rb должен содержать «resources: article». Rails очень анально относится к множественному числу и именам в единственном числе.
Большим преимуществом использования множественного имени ресурса, к которому вы обращаетесь, является то, что теперь вы можете использовать короткие обозначения, такие как «redirect_to @article», «form_for @article do | f |» и т. Д.
Итак, ресурсы в Rails должны рассказывать о том, что вы хотите получить. Это также помогает в обслуживании, так как другие разработчики должны угадывать меньше. Если вам понадобится более одного ArticlesController, рассмотрите возможность использования пространств имен или попытайтесь выяснить, действительно ли один из этих контроллеров является другим ресурсом (даже если они хранят свои данные в той же таблице базы данных).
Дополнительную информацию о маршрутизаторах можно найти в Руководстве по Rails: http://guides.rubyonrails.org/routing.html