通常,在Rails中使用表单助手时,每个字段都与相应对象上的方法直接相关。
但是,我有一个表单(用户注册),需要包含不属于用户模型本身的字段(例如,卡片详细信息),但需要显示。
如何构建表单以便我可以获得必要的字段,并根据需要验证它们(以便它符合我的所有其他验证)而不会弄脏我的用户模型?
答案 0 :(得分:3)
我不确定你的用户模型“弄脏”是什么意思,但你可以使用attr_accessor method来做到这一点。这将允许您为可用于验证的模型创建属性:
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
。有了这些,您应该能够实现您想要的功能。据我所知,没有更简洁的方法。
答案 1 :(得分:1)
Yehuda Katz有一个great explaination如何使用ActiveModel
使任意类与Rails的表单助手兼容。但这只适用于你在Rails 3上的情况。
如果你不是生活在最前沿,请观看Railscasts episode 193, "Tableless Model",其中介绍了如何创建一个类似于ActiveRecord::Base
的类,它与form_for
一起使用。