Рельсы с помощью link_to с маршрутами, расположенными по имени
Я создал набор маршрутов и контроллеров с пространством имен admin, и у меня возникли некоторые проблемы с помощью помощников ссылок с этими новыми маршрутами.
Я вижу, что есть несколько новых помощников пути, таких как admin_projects_path, которые приводят к /admin/projects. однако у меня возникли проблемы с привязкой к экранам show, edit, destroy и т.д. для этих объектов в пространстве имен. как это сделать?
Ответы
Ответ 1
Вы должны увидеть все ваши маршруты, перечисленные в rake routes
, и вы можете использовать их по имени, чтобы получить правильное пространство имен. Использование автоматического обнаружения, когда вы проходите в :controller
и :action
вручную, не будет работать так, как вы обнаружили.
Если он указан как new_thing
в маршрутах, то метод new_thing_path
с соответствующими параметрами. Например:
link_to('New Project', new_admin_project_path)
link_to('Projects', admin_projects_path)
link_to(@project.name, admin_project_path(@project))
link_to(@project.name, edit_admin_project_path(@project))
link_to(@project.name, admin_project_path(@project), :method => :delete)
Ответ 2
Если вы используете Rails 3, вы можете использовать пространство имен admin с переменной вместо того, чтобы писать длинное имя пути помощника.
Вид:
<td><%= link_to 'Show', [:admin, project] %></td>
<td><%= link_to 'Edit', [:edit, :admin, project] %></td>
<td><%= link_to 'Destroy', [:admin, project], confirm: 'Are you sure?', method: :delete %></td>
контроллер:
redirect_to [:admin, @project]
Ответ 3
Для некоторых методов требуется параметр: url в качестве параметра, и в этих случаях вы можете использовать url_for для генерации пути:
icon(:url => url_for(:controller => "admin/projects", :action => "edit", :id => @project),
:type => :edit)