Подтвердить что ты не робот

Рельсы с помощью link_to с маршрутами, расположенными по имени

Я создал набор маршрутов и контроллеров с пространством имен admin, и у меня возникли некоторые проблемы с помощью помощников ссылок с этими новыми маршрутами.

Я вижу, что есть несколько новых помощников пути, таких как admin_projects_path, которые приводят к /admin/projects. однако у меня возникли проблемы с привязкой к экранам show, edit, destroy и т.д. для этих объектов в пространстве имен. как это сделать?

4b9b3361

Ответ 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)