0

對於個人資料圖片和配置文件信息的其餘部分,我有兩個單獨的表單。然而,這兩種形式都對應於剖面模型。對於一些配置文件屬性,我有這樣的驗證:rails根據表單進行驗證

validates :title, presence: true 
validates :zip_code, presence: true 

的問題是,當有人嘗試上傳的圖像,這是我不希望驗證檢查。這就是說,我也有一個圖像驗證器,所以我不想完全避免驗證,只是某些。我正在考慮嘗試訪問模型中的params散列,但我無法弄清楚如何以及我很確定它是一個壞主意。我怎樣才能做出正確的驗證條件?我已經嘗試過這樣的:

validates :title, presence: true, :unless => :picture_exists? 

def picture_exists? 
    if self.pic 
     puts 'yo pic exist' 
     return true 
    else 
     puts 'yo no pic' 
     return false 
    end 
end 

,但它不工作,因爲它會檢查該配置文件是否有一個畫面,而不是PARAMS是否有他的照片。所以如果有人已經保存了一張圖片,他們將能夠繞過我不想要的驗證。我希望驗證在不使用圖片提交表單時被繞過。

回答

0

您可以通過多種方式處理這一問題:

1.-跳過在你的控制器動作的所有驗證(和手動驗證,我猜)

save(validate: false)(​​)

2:使用您在保存like this之前手動設置的條件。

3.-使用自定義驗證,以阻止所有其他驗證在通過時觸發。

也許你可以想出更多。

PS:爲什麼你會希望你的用戶在設置個人資料圖片之前繞過其他驗證?

GL HF &

+0

感謝,3號可以工作,但有沒有辦法真正做到這一點?我不確定我瞭解你的PS問題? – Philip7899

+0

我認爲數字2更好(和3密切相關)。也許這可以擺脫一些光:http://stackoverflow.com/questions/8881712/skip-certain-validation-method-in-model – rlecaro2

+0

@ Philip7899關於PS我問爲什麼所有其他驗證會觸發錯誤?即使其他字段爲空(或您正在驗證的任何內容),您的應用程序流是否會考慮設置個人資料圖片的用例? – rlecaro2