代码之家  ›  专栏  ›  技术社区  ›  Neil Middleton

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

  •  4
  • Neil Middleton  · 技术社区  · 15 年前

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

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

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Benjamin Manns    15 年前

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

        2
  •  1
  •   James A. Rosen    15 年前

    耶胡达·卡茨有一个 great explaination 如何使用 ActiveModel 使任意类与Rails的表单帮助程序兼容。不过,只有当你在3号轨道上时,这才有效。

    如果你不生活在流血的边缘,注意 Railscasts episode 193, "Tableless Model" ,它描述了如何创建一个类 ActiveRecord::Base 它与 form_for .

    推荐文章