2012-06-08 91 views
0

我有一個可以由兩種不同類型的用戶編輯的模型。第一個有一個登錄,並有特殊的權限(讓我們稱他們爲'用戶')。第二個就是一些沒有限制登錄的隨機用戶(我們稱他們爲'guest')。僅適用於某些控制器的驗證模塊

客人只通過一個控制器真正與模型交互,我們希望某些驗證只適用於這種情況。我們想要應用的驗證存在於模塊中。

我試圖做這樣的事情在控制器動作,但它似乎沒有工作:

@object = Model.find(params[:object_id]) 
@object.extend SpecialValidations 

然後就要檢查對象有效性(也許直接或更新屬性時),然後顯示驗證產生的任何錯誤。

有沒有更好的方法來做到這一點?

謝謝!

回答

1

一種選擇是在您的產品型號如下:

attr_accessor :guest 

def run_special_validations? 
    guest 
end 

validate :special_validation1, if: run_special_validations? 
validate :special_validation2, if: run_special_validations? 

然後,通過使控制器設置@object.guest = true,你會告訴對象運行條件的驗證。

0

您可以不加任何條件地進行驗證,只需在user控制器中跳過它(例如使用update_attribute方法)。

相關問題