Я только начал заниматься Ruby on Rails и столкнулся с проблемой со ссылкой на другое действие в контроллере с определенного вида. Я почти уверен, что это проблема (или отсутствие кода) в моем routes.rb
файле, но я думаю, что я неправильно понимаю, как работает этот файл и что мне нужно делать. У меня есть решение, но я уверен, что это не лучший способ сделать это.
У меня есть один контроллер с именем home
с двумя действиями, index
(по умолчанию) и newbill
. Внутри index.html.erb
у меня есть:
<h1>Home View</h1>
<%= link_to "new", :controller => "home", :action => "newbill" %>
Однако я получал ошибку маршрутизации:
No route matches {:controller=>"home", :action=>"newbill"}
Выполнение rake routes
дает мне следующее:
root / {:controller=>"home", :action=>"index"}
Затем я (после некоторого Googling) добавил этот код к routes.rb
match 'home/newbill' => 'home#newbill', :as => :newbill
И затем в моем index.html.erb
у меня есть это:
<%= link_to "Name", newbill_path %>
И теперь это работает так, как ожидалось. Мои вопросы:
- Почему это работает? Что именно происходит за кулисами?
- Неужели это не лучший способ сделать это? Добавление другого
match 'home/newbill'...
для каждого контроллера/действия, которое я хочу связать, кажется мусорным способом делать что-то.
Мне очень нравится Ruby, но немного борюсь с этим аспектом Rails... Маршрутизация вообще немного путает мне голову!
Любая помощь очень ценится: D
Спасибо,
Джек