Почему эшафот генерирует такие маршруты? Почему они работают? - PullRequest
0 голосов
/ 06 марта 2011

Во второй главе книги «Гибкая разработка с Rails» показано, что вы можете сказать:

<%= link_to "Goodbye",say_goodbye_path %>

Вместо жесткого указания пути к «/ скажем / до свидания».Имеет смысл, подумал я про себя.Вероятно, Ruby разделяет say_goodbye_path на _, назначая первую часть как имя контроллера, вторую часть как имя действия.Но потом я сгенерировал следующий каркас:

rails generate scaffold User name:string mail:string

И в представлении index.html.erb я заметил, что у него есть такие методы, как: edit_user_path(user).Я пытался переписать его на user_edit_path(user), но, конечно, это не сработало.Мой вопрос: почему эшафот связывает наоборот?Откуда мне знать, должен ли я писать их так, как их использует автор в link_to, или как они генерируются скаффолдом.Можете ли вы пролить свет на это?

Ответы [ 2 ]

2 голосов
/ 06 марта 2011

Вспомогательные функции, такие как user_edit_path, автоматически генерируются рельсами для отображения операций над ресурсами на соответствующие маршруты и, таким образом, пути HTTP и HTTP-глаголы.Вы должны понимать, что здесь вы имеете дело с ресурсами, а не обязательно с простыми контроллерами.

В то время как большую часть времени ваши ресурсы могут отображаться на один контроллер, это не обязательно должно быть так.Вы можете иметь вложенные или комбинированные ресурсы, что может привести к довольно сложным определениям маршрутизации.

Ресурсы обычно определяются путем присвоения ему имени (в данном случае user) и определения некоторых разрешенных операций над ними.Rails поощряет следовать там шаблону REST, поэтому у вас могут быть ярлыки для предопределения некоторых операций.Один из них - edit, который по умолчанию соответствует GET-запросу к users_controller # edit.Операции по умолчанию на ресурсах RAILS:

HTTP verb  path          matching controller action
===================================================
GET        /users        #=> index
GET        /users/1      #=> show
GET        /users/new    #=> new
GET        /users/1/edit #=> edit
PUT        /users/1      #=> update
POST       /users        #=> create
DELETE     /users/1      #=> destroy

Эти сопоставления могут быть настроены на вашем rout.rb (изменение методов, добавление или удаление операций, ...) Обычно вам рекомендуется использовать сопоставления по умолчанию, так как ониподдерживаются стандартными помощниками и облегчают понимание вашего приложения.

0 голосов
/ 06 марта 2011

Скаффолды - это код, сгенерированный шаблоном, который не связан с маршрутизацией.

Маршрутизация основана на route.rb в вашей папке конфигурации. Все ресурсы маршрутизируются по умолчанию (когда они создаются скаффолдами), но есть правило по умолчанию /:controller/:action/:id, которое вы можете включить. Подумайте о случае «поймать все».

Один из способов узнать, какие маршруты использовать, - отредактировать route.rb и запустить rake routes и посмотреть, как они меняются. Здесь также есть официальное руководство: http://guides.rubyonrails.org/routing.html

...