2013-01-15 54 views
0

我有我的控制器中的數據從另一個rails應用程序和數據庫接收(這必須在控制器)我想獲取這些數據,以便我可以在我的模型中驗證它,然後再允許嚮導中的另一個步驟(請參閱my other question的一些代碼示例)如何驗證模型中控制器的數據?

我的問題是我無法直接從我的模型中的控制器獲取此數據,因爲這違反了MVC。

我的問題是我該如何去檢查我的模型中的控制器數據?

  • 我是否必須在視圖中加載此數據/ true - false響應,然後將其鏈接到我的Model? (我真的不希望這出現在視圖中,並沒有完全弄清楚如何做到這一點)

  • 我需要這個數據傳遞給路線即example/data.json,然後檢查這在我的模型? (我還沒有制定出如何在我的模型中使用此data.json從那裏)

在正確的方向任何幫助/轉向將是非常有用的。雙重肯定,你不驗證由它本身並不包含數據模型(我也不能使用寶石來做到這一點

+0

來自請求的信息是否轉化爲對象的「狀態」?如果是這樣,您可以在對象上設置狀態,然後使用它在模型中進行驗證。通常情況下,控制器中有關請求,時間,會話,參數等的內容應該停留在那裏。與模型相關的東西應該放在模型上。你能更新對象並在模型上設置有效的狀態信息嗎? – Swards

+0

數據進來然後我基本上想檢查數據是否存在我可以讓控制器在其方法中返回true/false,但它必須存在於控制器中。然後我想從控制器得到這個響應,並用它來驗證我的模型。你有什麼想法如何做到這一點? –

回答

1

首先,請加倍。模型應該驗證它的當前狀態,但是而不是是它來到這個狀態的一種方式(例如,哪個用戶把模型放到這個狀態)。

第二,你不應該在模型中使用控制器方法。如果控制器包含一些業務邏輯,則將該邏輯提取到第三個類中,該類將由控制器和模型使用。

此外,你有一個控制器中的數據,你有權訪問模型,對不對?如果說,這些數據必須被檢查

def controller method 
    hey_model.is_this_correct?(data) 
end 

:因此,如果你在一個控制器的方法,例如在之前過濾器或行動,你可以採取數據並將其傳遞到模型中,像這樣的控制器已經迴應了一個請求(例如,在下一個嚮導步驟,即下一個請求),那麼您肯定必須在請求之間存儲該值。

這是無狀態HTTP的要點。直到您明確地執行此操作,纔會在請求之間保存數據。您可以將您的價值存儲在Cookie或數據庫中。

+0

數據來自另一個Rails應用程序數據庫(從控制器發出請求)此控制器必須包含此數據請求方法,它不能到達其他任何地方。模型驗證會是這樣的'validate:data_presence,if => lambda {| 0 | 0.current_step ==「step1」}''def data_presence #check控制器數據存在或真/假響應等結束數據來自數據庫,我想擺脫這再次存儲,但如果我需要放置它在step1視圖或某條可以接受的路線上的某個地方,您可以提出任何建議嗎? –

+1

建議#1。改變嚮導的邏輯(不是一件容易的事)。 建議#2。將當前步驟暫時保存在模型表中(它聞起來) 建議#3。將這些數據保存在cookies/session中,或者將它傳遞給下一步的表單,並將其插入下一個請求中。 –

+0

順便說一句,'| 0 | 0.current_step' < - 這是行不通的,你不能用整數 –

相關問題