Как действия контроллера знают, какую операцию REST выполнить? - PullRequest
2 голосов
/ 15 июля 2010

Когда я, например, в / profile / new и отправляю форму для создания профиля, Rails знает, как выполнить операцию POST; и когда я обновляю этот профиль из / profile / edit / 1, Rails знает, как выполнить операцию PUT ... У меня вопрос, откуда он это знает?

Я не могу понять, как это работает за пределами контроллера. Что именно происходит на заднем плане? Я немного покопался и знаю ActiveRecord и ActiveResource? участвуют, но я хотел бы знать детали. Я работаю только с Rails 2.2, и каждый ресурс, который я нахожу, преподает на примерах. Мне интересно понять, как все работает на более низком уровне, но ничто не поможет мне в процессе обучения, читая apis и исходный код.

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Вы знаете, как выглядит страница просмотра новой страницы или страницы редактирования в скаффолде пользователя, верно?

form_for(@user) # something like that

Так что это вспомогательный метод, который вы можете найти внутри action_view / helper .. file

В основном, рендеринг формы для new и edit будет решаться этим методом form_for, что будет делать этот метод form_for (я просто сделал несколько пунктов)

1) Он проверит, какой тип ввода вы указали в форме (проверьте API для различных способов использования помощника form_for) 2) Он определит параметры HTML на основе приведенного ниже кода

if object.respond_to?(:new_record?) && object.new_record? 
  { :class  => dom_class(object, :new),  :id => dom_id(object), :method => :post } # for new 
else
  { :class  => dom_class(object, :edit), :id => dom_id(object, :edit), :method => :put } # for edit
end

3) Он сделает еще одну вещь для страницы редактирования, добавит скрытое поле, в котором будет значение идентификатора пользователя.

Пожалуйста, дайте мне знать, если вам нужно больше деталей. Я обновлю свой ответ соответственно.

1 голос
/ 15 июля 2010

Лучшее, что я могу сказать, это полностью зависит от того, какое действие вы выполняете в контроллере. Например, @object.new будет действием POST, где @object.find([:params]) будет действием GET, основанным на практике RESTful.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...