Ух ты, вопросов много.Во-первых, позвольте мне порекомендовать вам взять копию " Beginning Rails 3 ", которая представляет собой фантастическое введение в Rails, которое ответит на все эти вопросы и поможет вам быстро стать очень надежным программистом rails.
Во-вторых, вот несколько основных ответов для вас:
1) Вы не должны переходить к products/create
, вы просто переходите к products/new
.Всякий раз, когда вы переходите по URL, вы отправляете запрос GET.«Новое» действие ожидает GET-запрос, но действие CREATE ожидает POST-запрос.POST-запросы генерируются путем отправки форм.
Таким образом, поток выглядит следующим образом:
Действие NEW используется для создания формы, соответствующей рассматриваемой модели (продуктам).Когда вы отправляете форму из products/new
, она отправляет POST в products/create
, что вызывает код в действии CREATE.
Отношения между NEW и CREATE отражаются в EDIT и UPDATE.То есть, чтобы изменить объект, который вы просматриваете на products/123/edit
, и оттуда вы отправляете форму, которая запускает действие UPDATE.
Все это подпадает под то, что называется «RESTful» дизайном, который действительно является сердцемкак работает Rails.Вы можете узнать больше о REST, вот хорошее место для начала .
2) form_for
получает данные от контроллера - но в случае действия NEW это нене получаю данные, просто пустой (новый) объект.form_for
- это помощник, который получает объект, и из этого объекта определяет часть HTML-кода, который должен произойти, чтобы сгенерированные формы правильно взаимодействовали с вашим контроллером.
То же самое происходит, когда вызагрузить страницу на products/edit
, но разница в том, что если вы передадите form_for
существующий (не новый) объект, он заполнит поля формы существующими значениями объекта.
3)Передача управления происходит через HTTP-запрос, настроенный в теге HTML <form>
.Это часть «магии» рельсов, она обрабатывает связи между браузером и контроллерами, поэтому вам не нужно об этом беспокоиться.
4) Я обычно не использую redirect_to(@product)
, но я ожидаю, что он приведет вас на страницу с продуктом, который вы только что создали, то есть: products/123
, где 123 - идентификатор продукта.
Надеюсь, это поможет, но, пожалуйста, подумайте о выборевверх по книге Beginning Rails: это очень хорошо, вы можете пройти через это примерно через неделю, и вы сэкономите ТОННЫ времени, начав на прочной основе, вместо того, чтобы бродить по коду, который вам совершенно незнаком.