Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在不存在的方法上使用Rails表单帮助程序_Ruby On Rails_Ruby_Helpers_Actionview - Fatal编程技术网

Ruby on rails 在不存在的方法上使用Rails表单帮助程序

Ruby on rails 在不存在的方法上使用Rails表单帮助程序,ruby-on-rails,ruby,helpers,actionview,Ruby On Rails,Ruby,Helpers,Actionview,通常,在Rails中使用表单帮助程序时,每个字段都与相应对象上的方法直接相关 但是,我有一个表单(用户注册),它需要包含不属于用户模型本身的字段(例如,卡片详细信息),但需要显示 我如何构建表单,以便获得必要的字段,并根据需要对其进行验证(以便与我的所有其他验证相匹配),而不必弄脏我的用户模型?我不确定您所说的“弄脏”您的用户模型是什么意思,但您可以使用。这将允许您为模型创建可用于验证的属性: class Widget < ActiveRecord::Base attr_accesso

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

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


我如何构建表单,以便获得必要的字段,并根据需要对其进行验证(以便与我的所有其他验证相匹配),而不必弄脏我的用户模型?

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

class Widget < ActiveRecord::Base
  attr_accessor :confirmation_email
  validates_length_of :confirmation_email, :within => 1..10
end
class小部件1..10
结束
要仅在特定时间运行验证,可以使用
:if
条件:

验证以下内容的长度:确认\u电子邮件,:in=>1..10,:if=>Proc.new{widget}widget.creation\u step>2}

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

Yehuda Katz提供了一种方法,可以使用
ActiveModel
使任意类与Rails的表单助手兼容。不过,这只有在Rails 3上才有效


如果你不是生活在最前沿,看看,它描述了如何创建一个像
ActiveRecord::Base
这样的类,它与
form_for

一起工作,本质上我并不是在构建一个与所讨论的模型直接相关的表单。例如,注册表单可能包含一些用户属性和一些“丢弃”属性(例如,您可能会在CC网关上启动这些属性,然后忘记它们)。如果我在我的用户模型上创建了属性,我将始终需要提供这些属性以通过验证,而我只想在这个位置验证这个表单上的这些项。我已经添加了关于:If条件的信息,这可能是您正在寻找的。