2010-02-19 15 views
4

通常情况下,在导轨用形式助手时,每个字段直接与适当的对象上的方法。使用Rails形成上不存在的方法助手

不过,我有一个表格(用户注册)需要包含不属于用户模型本身(例如,信用卡详细资料)的一部分,但需要显示的字段。

我怎样才能建立表格,以便我能得到必要的字段,并对其进行验证,因为我需要(让它与我的其他所有验证配合),而不脏-ING我的用户模式?

回答

3

我不知道你所说的“脏-ING”您的用户模型的意思,但你可以使用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。有了这些,你应该能够实现你想要的功能。据我所知,没有更简洁的方法。

+0

基本上我不是建设一个直接与有问题的模型的形式。例如,注册表单可能包含一些用户属性,以及一些“丢弃”属性(例如,您可能在CC网关处触发并遗忘的属性)。 如果我创建了我的用户模型的属性,我总是需要提供这些属性对于验证通过,而我只想在这一位置来验证这种单一的形式在这些项目上。 – 2010-02-19 09:53:07

+0

我已经添加了关于if条件的信息,这可能是您正在寻找的内容。 – 2010-02-19 14:38:10

1

Yehuda Katz有一个great explaination你如何使用ActiveModel来制作一个与Rails的表单助手兼容的任意类。但是,只有在Rails 3上才有效。

如果你不生活在最前沿,看Railscasts episode 193, "Tableless Model",它描述了如何创建叫声像足是ActiveRecord::Base它与form_for类。