Witam.
Zagnieździłem routing w taki sposób
resources :project_strongs do
get 'dashboard/index'
resources :result_strongs
resources :player_strongs
end
Następnie poporawiałem linki według schematu:
result_strong_path => project_strong_result_strong_path
Niby wszystko działa, ale niestety nie znajduje mi routingu dla takich rzeczy jak
<td><%= link_to 'Show', project_strong_result_strong_path(1) %></td>
<td><%= link_to 'Edit', edit_project_strong_result_strong_path(result_strong) %></td>
Wyskakuje mi błąd: No route matches {:action=>“show”, :controller=>“result_strongs”, :format=>nil, :id=>nil, :project_strong_id=>1} missing required keys: [:id]
O co dokładnie chodzi ? Jak naprawić ten błąd? Najlepiej chciałbym zobaczyć to na przykładzie krótkiego kodu.
Pozdrawiam.
Do takiej zagnieżdżonej ścieżki potrzebujesz podać oba zasoby, w tym wypadku project_strong i result_strong, np:
project_strong_result_strong_path(project_strong, result_strong)
project_strong_result_strong_path(project_strong_id: 33, id: 434)
Aha. Czyli pierwszy parametr to taki główny routing, a drugi to już wartość?
Czyli jeżeli miałbym zagnieżdżenie dwa razy to wyglądało by to tak:
resources :project_strongs do
resources :result_strongs do
get 'dashboard/index'
end
end
I wtedy: project_strong_result_strong_path(project_strong, result_strong, 3) Byłoby to poprawnym rozwiązaniem ?
I jeszcze jak zrobić poprawnie taki oto kod:
<% @result_strongs.each do |result_strong| %>
<tr> ....
......
<td><%= link_to 'Show', result_strong %></td>
Skoro result_strongs.each jest z kontrolera, to czemu link nie działa?
Żeby zobaczyć dokładnie jakie elementy potrzebuje dana ścieżka najlepiej użyć rake routes
w konsoli i poszukać odpowiedniej ścieżki (można użyć do tego grep, np. rake routes | grep project
wyświetli wszystkie ścieżki zawierające ‘project’), tam będą wszystkie potrzebne elementy poprzedzone dwukropkiem, np. :project_strong_id
.
W twoim przykładzie project_strong_result_strong_path
potrzebuje dwóch elementów: :project_strong_id
i :id
, czym miała by być ta 3
? Co miała by robić?
Co znaczy “nie działa”? Obstawiam, że zapewne masz błąd mówiący, że nie ma takiej ścieżki, bo istotnie nie ma ścieżki result_strong_path
- masz tylko ścieżkę zagnieżdżoną i musisz powiedzieć railsom, że to jej chcesz użyć, albo bezpośrednio przez helper project_strong_result_strong_path(project_strong, result_strong)
, albo korzystając z magii railsów: link_to 'Show', [project_strong, result_strong]
.
Zacznę kombinować z routes’ami i bardzo Ci dziękuję za wskazówkę jak się za takie problemy zabierać.