通常情况下,在导轨用形式助手时,每个字段直接与适当的对象上的方法。使用Rails形成上不存在的方法助手
不过,我有一个表格(用户注册)需要包含不属于用户模型本身(例如,信用卡详细资料)的一部分,但需要显示的字段。
我怎样才能建立表格,以便我能得到必要的字段,并对其进行验证,因为我需要(让它与我的其他所有验证配合),而不脏-ING我的用户模式?
通常情况下,在导轨用形式助手时,每个字段直接与适当的对象上的方法。使用Rails形成上不存在的方法助手
不过,我有一个表格(用户注册)需要包含不属于用户模型本身(例如,信用卡详细资料)的一部分,但需要显示的字段。
我怎样才能建立表格,以便我能得到必要的字段,并对其进行验证,因为我需要(让它与我的其他所有验证配合),而不脏-ING我的用户模式?
我不知道你所说的“脏-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
。有了这些,你应该能够实现你想要的功能。据我所知,没有更简洁的方法。
Yehuda Katz有一个great explaination你如何使用ActiveModel
来制作一个与Rails的表单助手兼容的任意类。但是,只有在Rails 3上才有效。
如果你不生活在最前沿,看Railscasts episode 193, "Tableless Model",它描述了如何创建叫声像足是ActiveRecord::Base
它与form_for
类。
基本上我不是建设一个直接与有问题的模型的形式。例如,注册表单可能包含一些用户属性,以及一些“丢弃”属性(例如,您可能在CC网关处触发并遗忘的属性)。 如果我创建了我的用户模型的属性,我总是需要提供这些属性对于验证通过,而我只想在这一位置来验证这种单一的形式在这些项目上。 – 2010-02-19 09:53:07
我已经添加了关于if条件的信息,这可能是您正在寻找的内容。 – 2010-02-19 14:38:10