Mor*_*ger 68 activerecord ruby-on-rails ruby-on-rails-3
我有一个模型,我有一个视图,显示一个基于该模型创建新对象的表单.我们称之为那种形式Form1.
用户提交后Form1,将创建该对象.然后,我想在下一页上显示第二个表单Form2,该表单要求用户在将对象保存到数据库之前检查各种选项.
我的问题可能非常基本.我不知道如何创建Form2,因为它不直接与模型绑定.因为我是Rails新手,所以我只创建了以下表格:
form_for(@object) { |f| ... }
Run Code Online (Sandbox Code Playgroud)
@object 是从模型实例化的对象
问题:我不相信这种代码在我的目的下会起作用.我如何创造Form2,因为它不能基于@object或@object模型?
我的应用程序中的一些细节:
Form1在重定向到OAuth服务器之前,站点接受values().
当用户在OAuth服务器上验证其凭据时,她将被重定向回我的站点.一个XML-RPC请求,然后获取关于用户的账户上的信息OAuth服务器.
该XML响应可能表明用户只有一个帐户上的OAuth服务器.如果是这样,则从中检索一些值XML并将其添加到对象中 - 然后(最终)将其保存在数据库中 - 并将用户重定向到成功页面.
但是,如果XML响应表明用户在OAuth服务器上有多个帐户,我想显示一个表单(Form2),允许用户选择OAuth服务器上与我的站点关联的帐户.因此,Form2确实要求用户创建多少对象,而不是关于对象的特定属性.
Dyl*_*kow 117
使用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 %>
Run Code Online (Sandbox Code Playgroud)
Rails API站点对所有_tag助手都有很好的参考:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html
Kar*_*aen 35
从rails3开始,验证已与ActiveRecord分离,因此您可以创建可用作表单助手的验证器的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
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中:
<%= form_for(Person.new) do |f| %>
...
Run Code Online (Sandbox Code Playgroud)
这是一种方便的方法,可以在不必创建与模式绑定的模型对象的情况下,为电子邮件表单等内容提供表单帮助程序的好处.
要创建无表格模型,
class Person
include ActiveModel::Model
attr_accessor :first_name, :last_name
validates :first_name, :last_name, presence: true
end
Run Code Online (Sandbox Code Playgroud)
然后在你看来,
<%= form_for(Person.new) do |f| %>
.... your form ....
<% end %>
Run Code Online (Sandbox Code Playgroud)
另一个类似的解决方案可以在以下位置找到RailsCasts:
Active-Model
| 归档时间: |
|
| 查看次数: |
41874 次 |
| 最近记录: |