Соглашение об именах маршрутизации Rails - PullRequest
0 голосов
/ 14 июля 2011

По какой-то причине обычные имена путей для конкретного контроллера не работают? (Рельсы 3.1)

Я создал контроллер, используя Райан Бейтс, отличный скаффолд. Просто контроллер, без базовой модели.

в контроллере у меня

class ProjectTemplatesController < ApplicationController
# a bunch of stuff

  def new
    @project = Project.new
  end

#more stuff
end

на мой взгляд (app / views / project_templates / index.html.erb) у меня есть:

<p><%= link_to "New Project Templates", new_project_templates_path %></p>

однако я получаю ошибку

undefined local variable or method `new_project_templates_path' for #<#<Class:0x2ab9c24>:0x2ab80e0>

в моем файле rout.rb я объявил контроллер как ресурс, как и все остальные

resources :project_templates 

Если я поменяю ссылку на использование

<%= link_to "New Project Templates", {:controller=>"project_templates, :action=>"new"} %>

тогда он работает отлично?! Почему в этом случае не работает соглашение об именах action_controller_path?

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Простое дополнение к предыдущим постам, отмечающее возможность запуска рейковых маршрутов. Если в системе POSIX, запустите результат через grep или другой текстовый фильтр.

rake routes | grep project

или

bundle exec rake routes | grep project

Генерируемые маршруты могут стать очень многочисленными в больших проектах, поэтому я предлагаю стать гуру инструментов командной строки, чтобы эффективно обрабатывать данные.

2 голосов
/ 14 июля 2011

Вы можете найти все маршруты и их имена в командной строке с помощью rake routes.

Rails знает о используемом вами множественном числе, поэтому оно может быть волшебным образом удалено и присвоено имя маршруту new_project_template_pathбез 's'?

0 голосов
/ 14 июля 2011

Если вы используете resources :project_templates, вы можете безопасно сделать что-то вроде этого:

link_to "All Project Templates", :project_templates
link_to "New Project Template", [:new, :project_template]
link_to "Edit Project Template", [:edit, @project_template]
link_to "Show Project Template", @project_template
link_to "Delete Project Template", @project_template, :method => :delete
form_for ProjectTemplate.new do |f|
form_for @projectTemplate do |f|

Таким образом, вам не нужно запоминать проблему множественного числа или единственного числа.

Еще одна вещь - это то, что вы действительно можете обернуть их все в [], чтобы не беспокоиться о них.

link_to "All PT", [:project_templates]
link_to "Show PT", [@project_template]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...