2015-08-25 3 views
0

на https://www.codecademy.com/en/courses/learn-rails/lessons/start/exercises/start-views, действие Controll описывается как «страница # дом»:что определяет действия контроллера рубин рельсы

Well done! Now when a user visits http://localhost:8000/welcome, the route 

get 'welcome' => 'pages#home' 

will tell Rails to send this request to the Pages controller's home action. 

, но когда я сделал контроллер я rails generate controller Pages, который в верхнем регистре.

pages_controller.rb:

class PagesController < ApplicationController 

    def home 
    end 

end 
  1. ли pages часть pages#home определяется по первой части pages_controller.rb, не обращая внимания на _controller.rb конец?

  2. Что произойдет, если я изменю pages_controller.rb на renamedpages_controller.rb, но оставьте это имя класса как PagesController?

спасибо

ответ

1
  1. Да. и #home является «действие» в PagesController
  2. Вы получаете uninitialized constant PagesController ошибку

Таким образом, ваши контроллеры должны всегда быть в форме, определенной в NameControllername_controller.rb, и действия, как публичные методы в NameController.

2

Когда запрос сделан, как: http://localhost:8000/welcome, она совпадает с route в routes.rb файле, где маршрут отображается на controller и action.

В файле маршрутов, у вас есть:

get 'welcome' => 'pages#home' 

get 'welcome' совпадал с URL .../welcome и отображающих этот запрос pages#home где pages это имя контроллера и home это действие (метод, определенный в pages_controller) , Это соглашение Rails, чтобы назвать контроллеры, подобные этому: ControllerName_controller.rb. Итак, в основном pages - это имя вашего контроллера, а последнее _controllers является общим для каждого контроллера в вашем приложении Rails.

Что происходит дальше, это действие контроллера выполняет некоторую работу и разговаривает с model/database и создает необходимые переменные/данные, которые будут переданы в view. Согласно соглашению Rails, должен быть сопоставлен файл view, такой как: home.html.erb, который отобразит ответ в браузере.

Есть и другие способы визуализации различных partials и views по-разному, но если вы следуете за соглашением Rails, тогда становится очень легко понять и работать с разными моделями, представлениями и контроллерами в Rails. Это называется: Конвенция по конфигурации. Когда вы следуете за Соглашением Rails для именования вещей, Rails делает много работы и конфигурации для вас, чтобы сделать вашу жизнь проще.

Когда вы get 'welcome' => 'pages#home' в файле routes, а затем, когда запрос: /welcome приходит, он отображает до pages_controller, и он будет искать pages_controller.rb файла под app/controller/. Если вы переименуете это на что-то еще, программа не найдет его так, как ожидалось, и выдаст вам сообщение об ошибке, и ваш запрос не будет завершен.

Имя вашего контроллера должно совпадать с именем класса этого контроллера. Это также соглашение Rails. Если вы измените какой-либо из них, вы получите сообщение об ошибке, и ваш запрос не удастся.

+0

отличный ответ, но я должен выбрать другого, поскольку он ответил на обе части. Прости – codyc4321

2

Контроллер действия - это C в MVC. После того, как маршрутизатор определил, какой контроллер использовать для запроса, ваш контроллер отвечает за понимание запроса и выдачу соответствующего результата. К счастью, Action Controller выполняет большую часть работы для вас и использует интеллектуальные соглашения, чтобы сделать это максимально простым.

Controller Naming Convention

именования контроллеров в Rails способствует плюрализацию последнего слова в названии контроллера, хотя это не является обязательным (например, ApplicationController). Например, ClientsController предпочтительнее ClientController, SiteAdminsController предпочтительнее SiteAdminController или SitesAdminsController и т. Д.

Следуя этому соглашению, вы можете использовать генераторы маршрутов по умолчанию (например, ресурсы и т. Д.), Не требуя квалификации каждого: путь или контроллер, а также сохранение согласования URL-адресов и путей в вашем приложении. См. Rails Guides.

Смежные вопросы