2012-12-10 62 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