使用Rails在不存在的方法上形成帮助器

时间:2010-02-19 00:07:36

标签: ruby-on-rails ruby helpers actionview

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

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

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

2 个答案:

答案 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一起使用。