所以我有一個註冊表單,其中的一部分是賬單/信用卡信息。該信息全部由第三方應用程序存儲和處理,因此數據不會存儲在我們的數據庫中。是否可以對不屬於模型的表單項進行驗證?
那麼我怎麼能仍然通過Rails中的validates_方法運行項目? (validates_presence_of
,validates_length_of
,等等等等)
或者我正在驗證這些項目的錯誤位置?
所以我有一個註冊表單,其中的一部分是賬單/信用卡信息。該信息全部由第三方應用程序存儲和處理,因此數據不會存儲在我們的數據庫中。是否可以對不屬於模型的表單項進行驗證?
那麼我怎麼能仍然通過Rails中的validates_方法運行項目? (validates_presence_of
,validates_length_of
,等等等等)
或者我正在驗證這些項目的錯誤位置?
您可以創建一個虛擬模型來簡化表單的信息。沒有要求將模型保存到數據庫。
只需在應用程序/模型中創建一個新文件,您就可以輕鬆前往。
例如:應用程序/模型/ 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
如果窗體是基於另一種模式,你可以只是移動上述模型的內部到模型的形式是基於,完全相同的影響。
您可以通過調用有效的驗證而不保存?方法。像任何其他模型一樣渲染錯誤(如果有效)?返回false。否則繼續處理。
是的,我相信這是可能的,例如
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
對於未來的讀者誰使用Rails3中,加載ActiveModel結賬:
require 'active_model'
class Place
include ActiveModel::Validations
validates_presence_of :name
attr_accessor :name
end