Rails 3 / Form没有模型:我如何创build一个不绑定到模型的表单?

我有一个模型,我有一个视图,显示一个基于该模型创build一个新的对象的forms。 我们称之为Form1

一旦用户提交Form1 ,就创build了该对象。 然后,我想在下一页显示Form2的第二个表单,要求用户在将对象保存到数据库之前检查各种选项。

我的问题可能是非常基本的。 我不知道如何创buildForm2 ,因为它不直接绑定到模型上。 因为我是Rails新手,所以我只创build表单如下:

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

@object是从模型实例化的一个对象

问题 :我不相信这种代码在我的目的下可以工作。 如何创buildForm2 ,因为它不能基于@object@object的模型?

从我的应用程序的一些细节

该网站在redirect到OAuth服务器之前接受值( Form1 )。

当用户在OAuth服务器上validation她的凭据时,她被redirect回我的网站。 然后, XML-RPC请求将检索有关OAuth服务器上用户帐户的信息。

XML响应可能表示用户在OAuth服务器上只有一个帐户。 如果是这样,则从XML中检索一些值并将其添加到对象中,然后(最后)将其保存到数据库中,然后将用户redirect到成功页面。

但是,如果XML响应表明用户在OAuth服务器上有多个帐户,我想要显示一个表单( Form2 ),以允许用户selectOAuth服务器上哪些帐户与我的网站相关联。 所以Form2确实要求用户创build多less个对象,而不是一个对象的特定属性。

使用form_tag而不是form_for ,然后使用适当的表单助手: text_field_tag代替f.text_fieldtext_area_tag代替f.text_area等。示例:

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

Rails API网站对所有_tag帮助器有很好的参考: http ://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html

从rails3开始,validation已经从ActiveRecord中分离出来,所以你可以创build一个可以用来作为表单助手的validation器的vanilla对象:

  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| %> ... 

这是一种方便的方式来获得forms助手的好处,如电子邮件forms,而不必创build一个模型对象绑定到您的模式。

如果你正在寻找使用SimpleForm那么这里有一个特定的答案是否form_tag使用Simple_form?

要创build一个无表模型,

 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 %> 

另一个类似的解决scheme可以在RailsCastsfind: 主动模型