2014-05-15 73 views
1

我的表單中有一些字段不是模型的一部分,我知道如何驗證控制器中的這些字段,但我想知道是否可以驗證此在模型中?ROR:驗證模型文件中的非模型字段

如果有可能,我將如何驗證下一個? 例如

text_field(nil, :non_model_field) 
+1

驗證不關心值是否持久。 –

回答

4

試試這個:

把虛擬屬性的模式。

class MyModel < ActiveRecord::Base 

    attr_accessor :non_model_field 
    validates :non_model_field, presence: true # or whatever other validations you want 

end 
+0

我曾嘗試過,但rails形式拋出的錯誤是,即使我輸入字符串作爲輸入,non_model_field也不能爲空。 – Leo

+0

如果您刪除了驗證:'presence:true',是否會引發錯誤'field can not be blank'?它聽起來像它拿起驗證,但不認識'字符串輸入' –

+0

我試過了,但我必須添加「長度:{最小:1}」,因爲驗證行必須至少有一個條件,但它說「non_model_filed太短(最小爲1個字符)「,我看它沒有收到字符串作爲輸入。 :■ – Leo

2

正如@wali Ali提到的,你需要使用attr_accessor方法通過創建相關getter & setter方法模型,基本上創建非持久性數據

此方法使用一個虛擬屬性創建一系列可用於模型對象的屬性。然後可以通過您的模型驗證這些屬性,即使它們未保存:

#app/models/model.rb 
Class Model < ActiveRecord::Base 
    attr_accessor :test, :attribute #-> creates @model.test & @model.attribute 
    validates :test, :attribute, presence: true 
end