Как вы можете передать объект из помощника form_for в метод? - PullRequest
1 голос
/ 20 мая 2010

Итак, скажем, у меня есть форма, которая отправляется куда-то странно (и под странным мы подразумеваем, НЕ маршрут по умолчанию:

<% form_for @form_object, :url => {:controller => 'application',
                  :action => 'form_action_thing'} do |f| %>
  <%= f.text_field :email %>
  <%= submit_tag 'Login' %>
<% end %>

Теперь допустим, что у нас есть метод, который его принимает.

def form_action_thing
  User.find(????? :email ?????)
end

Мои вопросы таковы:

  1. Как сделать объект @form_object доступным для метода получения (в данном случае form_action_tag)?
    • Я пытался params[:form_object], и я искал этот сайт и API, который я должен опубликовать ниже, потому что ТАК не верит, что я не спамер (я новый член), а также погуглил столько вариантов этой идеи, сколько я мог придумать. Ничего такого. Извините, если я что-то пропустил, я действительно пытаюсь.
  2. Как мне обратиться к объекту, как только я сделаю его доступным для метода? Не params[:form_object], я думаю.

EDIT

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

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

Ответы [ 3 ]

1 голос
/ 20 мая 2010

вам нужно передать "id" вашего "@form_object" в URL, а затем найти этот объект (при условии, что у вас есть модель и вы используете ActiveRecord)

0 голосов
/ 20 мая 2010

Вы можете передавать параметры через URL-адрес, но при отправке формы единственное, что (вероятно) следует передать через URL-адрес, - это идентификатор записи для записи RESTful.

И, похоже, вы еще не выяснили, где можно найти данные формы в params.

So

  • Все данные из вашей формы должны в конечном итоге в params[:form_object]. Фактическое значение для :form_object выбирается Rails, оно, вероятно, исходит из класса объекта (слишком ленив, чтобы посмотреть это прямо сейчас)
  • В любом случае вы можете легко узнать, куда отправляются значения вашей формы, посмотрев вывод консоли или журнала. Все параметры для каждого запроса сбрасываются туда.
  • Поля формы будут внутри параметров, таких как params[:form_object][:email] - каждое отправленное поле имеет запись, соответствующую имени поля.
  • Хэш params , а не содержит все исходные значения из вашего @form_object. Будут только те значения, которые вы включили в форму.
  • Если вам необходимо передать не редактируемые значения в контроллер с вашей формой, используйте hidden_field (s). Они будут отправлены вместе с формой, но невидимы для пользователя.
0 голосов
/ 20 мая 2010

Это зависит от того, как вы настраиваете свои маршруты. Если вы используете маршрут по умолчанию /: controller /: action /: id, вы можете передать его в качестве параметра в URL. Обратите внимание, что не весь @form_object может / должен быть передан, но это id или некоторый другой атрибут, чтобы идентифицировать его В этом случае вы должны указать свой URL:

<% form_for @form_object, :url => {:controller => 'application',
                  :action => 'form_action_thing', :email => some_email} do |f| %>
  <%= f.text_field :email %>
  <%= submit_tag 'Login' %>
<% end %>

А в вашем контроллере

def form_action_thing
  @user = User.find_by_email(params[:email])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...