2012-12-10 61 views
0

我使用carrierwave上傳圖像文件。我基本上有一個表單字段「_form.html.erb」,它具有提交給數據庫的標題,描述,圖像和類別。我想要做的是,如果一個類別是!=「社交」,然後檢查圖像的存在,但如果它等於社交,那麼繼續並提交給數據庫沒有圖像。現在,當提交「圖像不能爲空」時出現錯誤。我認爲這個錯誤可能來自我在模型中的validates_presence_of:image行,但對此不確定。所以我試圖把它包裝在if語句塊中,但我仍然得到它。有誰知道我如何解決我想要做的事情。carrierwave上傳異常

if :category != "social" 
    validates_presence_of :image 
    end 

回答

2

使用Proc與驗證程序:if選項。

validates :image, presence: true, if: Proc.new { |a| a.category != "social" } 

推薦閱讀:http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-proc-with-if-and-unless

+0

我仍然沒有從你的鏈接爲什麼使用一個Proc將使這項工作明白。 Proc只是保存代碼的一個對象。這對我工作,並感謝代碼。 – Chapsterj

+0

首先,'if:category!=「social」'不管上下文都不會工作。符號':category'轉換爲String將*永遠*等於String''social''。 'Proc'工作是因爲Rails通過':if'或':unless'選項支持它。它會將當前模型的上下文傳遞給'Proc' *(這就是'Pro''中的'a')*。 'Proc'的返回值用於評估':if'或':unless'來有條件地應用驗證器。 – deefour