Подтвердить что ты не робот

Rails 3/Form without Model: Как создать форму, не привязанную к модели?

У меня есть модель, и у меня есть представление, которое отображает форму для создания нового объекта на основе этой модели. Позвоните в эту форму, Form1.

Как только пользователь отправляет Form1, объект создается. Затем я хочу отобразить на следующей странице вторую форму Form2, которая просит пользователя проверить различные параметры до того, как объект будет сохранен в базе данных.

Моя проблема, вероятно, чрезвычайно простая. Я не знаю, как создать Form2, учитывая, что он не привязан непосредственно к модели. Поскольку я новичок Rails, я создал только следующие формы:

form_for(@object) { |f| ... }

@object - это объект, созданный из модели

Проблема. Я не верю, что такой код будет работать для моих целей здесь. Как создать Form2, учитывая, что он не должен основываться на модели @object или @object?

Некоторые особенности из моего приложения:

Перед перенаправлением на сервер OAuth сайт принимает значения (Form1).

Когда пользователь проверяет свои учетные данные на сервере OAuth, она перенаправляется обратно на мой сайт. Затем запрос XML-RPC извлекает информацию об учетной записи пользователя на сервере OAuth.

Ответ XML может указывать на то, что пользователь имеет только одну учетную запись на сервере OAuth. Если это так, некоторые значения извлекаются из XML и добавляются к объекту - который затем (наконец) сохраняется в базе данных - и пользователь перенаправляется на страницу успеха.

Однако, если ответ XML указывает, что у пользователя несколько учетных записей на сервере OAuth, я хочу отобразить форму (Form2), которая позволяет пользователю выбирать, какие учетные записи на сервере OAuth связываться с моим сайтом. Поэтому Form2 действительно запрашивает у пользователя, сколько объектов создавать, а не об определенных атрибутах объекта.

4b9b3361

Ответ 1

Используйте form_tag вместо form_for, затем используйте соответствующие формы: text_field_tag вместо f.text_field, text_area_tag вместо f.text_area и т.д. Пример:

<%= form_tag "/my_controller/update2" do %>
  <%= text_field_tag "account", "default info" %>
  <%= submit_tag "Save" %>
<% end %>

Сайт API Rails имеет отличную ссылку на все помощники _tag: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html

Ответ 2

Начиная с rails3, проверки были отделены от ActiveRecord, поэтому вы можете создавать объекты ванили, которые могут использоваться как валидаторы с помощью хэндлеров формы:

 class Person
   include ActiveModel::Validations

   attr_accessor :first_name, :last_name

   validates_each :first_name, :last_name do |record, attr, value|
     record.errors.add attr, 'starts with z.' if value.to_s[0] == ?z
   end
 end

а затем в вашем шаблоне:

<%= form_for(Person.new) do |f| %>
...

Это удобный способ получить преимущества помощников формы для таких вещей, как формы электронной почты, не создавая объект модели, привязанный к вашей схеме.

Ответ 4

Чтобы создать модель без таблицы,

class Person
  include ActiveModel::Model

  attr_accessor :first_name, :last_name

  validates :first_name, :last_name, presence: true
end

Тогда, на ваш взгляд,

<%= form_for(Person.new) do |f| %>
 .... your form ....
<% end %>

Другое подобное решение можно найти в RailsCasts: Active-Model