2013-07-24 29 views
0

由於一些問題,我一直在使用一個系統,該系統在許多頁面中使用了一個模型,其模型內容的驗證因控制器步驟而異。Rails模型應用基於控制器的驗證

E.g.當@step = 1時,模型應該validates_precense_of:name,但是您只驗證直到@step = 2的年齡。

但是,由於rails模型無法讀取會話或全局變量,我該如何應用?

+0

'@ step'是不是一個全球性的,但放在一邊,不是模型的步驟的一部分?如果不是,爲什麼不能呢?它不需要持久化,只需將其設爲僞屬性即可。 –

+0

不,基本上,我有很多使用交叉模型屬性的視圖,例如,第一視圖將需要一些驅動程序信息:名稱,第二視圖將要求用戶輸入年齡。當我提交第一個視圖時,我希望模型驗證:name,但不驗證年齡,因爲直到第二個視圖才需要它。但是當我點擊提交第二個視圖時,我想要驗證年齡 – phil88530

+0

@step是什麼?這是一個模型嗎?一個變量來確定視圖? @step在應用程序中做了什麼? 編輯:你回答之前,我把這個評論... –

回答

0

我相信戴維說的是

class Model 
    attr_accessor :step 
    validate_presence_of :name, if: { |m| m.step == 1 } 
    validate_presence_of :age, if: { |m| m.step == 2 } 
end 

class Controller 
    def first_step 
    @model = Model.new(params[:model].merge(step: 1)) 
    if @model.valid? 
    .... 
    end 
    def second_step 
    @model.update_attributes(params[:model].merge(step: 2)) 
    if @model.valid? 
    .... 
    end 
end