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