【发布时间】:2009-11-12 23:16:25
【问题描述】:
所以我有一个注册表单,其中一部分是帐单/信用卡信息。该信息全部由第三方应用程序存储和处理,因此数据不会存储在我们的数据库中。
那么我怎样才能通过 Rails 中的 validates_ 方法运行这些项目呢? (validates_presence_of、validates_length_of 等)
还是我在错误的地方对这些项目进行验证?
【问题讨论】:
所以我有一个注册表单,其中一部分是帐单/信用卡信息。该信息全部由第三方应用程序存储和处理,因此数据不会存储在我们的数据库中。
那么我怎样才能通过 Rails 中的 validates_ 方法运行这些项目呢? (validates_presence_of、validates_length_of 等)
还是我在错误的地方对这些项目进行验证?
【问题讨论】:
对于正在使用 Rails3 的未来读者,请查看 ActiveModel:
require 'active_model'
class Place
include ActiveModel::Validations
validates_presence_of :name
attr_accessor :name
end
【讨论】:
您可以创建一个虚拟模型来方便您的表单信息。不需要将模型保存到数据库。
只需在 app/models 中创建一个新文件就可以了。
示例:app/models/ccinfo.rb
class Ccinfo < ActiveRecord::Base
attr_accessor :card_type, :card_number, :pin, :exp_month, :exp_date, :card_holder, ...
validates_presence_of :card_holder
...
end
如果表单基于另一个模型,您只需将上述模型的内部移动到表单所基于的模型中,效果完全相同。
您可以通过调用 valid? 来验证而不保存。方法。如果有效,像使用任何其他模型一样呈现错误?返回假。否则继续处理。
【讨论】:
是的,我相信可以做到这一点
例如
class User < ActiveRecord::Base
attr_accessor :card_number
validates_presence_of :card_number
end
您需要在模型本身中创建属性,然后对其应用验证。
您也可以编写自己的访问器,像这样将数据发送给第三方
class User < ActiveRecord::Base
attr_accessor :card_number
validates_presence_of :card_number
def card_number=(number)
.....
end
end
【讨论】: