5

通常,在 Rails 中使用表单助手时,每个字段都直接与相应对象上的方法相关联。

但是,我有一个表单(用户注册)需要包含不属于用户模型本身但需要出现的字段(例如,卡详细信息)。

如何构建表单以便获得必要的字段,并根据需要验证它们(以便它适合我的所有其他验证)而不弄脏我的用户模型?

4

2 回答 2

4

我不确定你所说的“弄脏”你的用户模型是什么意思,但你可以使用attr_accessor 方法来做到这一点。这将允许您为模型创建一个可用于验证的属性:

class Widget < ActiveRecord::Base
  attr_accessor :confirmation_email
  validates_length_of :confirmation_email, :within => 1..10
end

要仅在特定时间运行验证,您可以使用:if条件:

validates_length_of :confirmation_email, :within => 1..10, :if => Proc.new { |widget| widget.creation_step > 2 }

您还可以使用类方法,例如::if => :payment_complete. 有了这些,您应该能够实现您想要的功能。据我所知,没有更简洁的方法了。

于 2010-02-19T00:35:34.833 回答
1

Yehuda Katz对如何使用Rails 的表单助手创建任意类进行了很好的解释。ActiveModel不过,这仅在您使用 Rails 3 时才有效。

如果您不是生活在最前沿,请观看Railscasts 的第 193 集“无表模型”,它描述了如何创建一个足以与ActiveRecord::Base它一起工作的类form_for

于 2010-02-19T19:11:30.513 回答