【问题标题】:How to add a custom file upload validation model with rails?如何使用 Rails 添加自定义文件上传验证模型?
【发布时间】:2015-10-04 09:12:52
【问题描述】:

我想用 Rails4 做一个文件上传功能。

现在我不使用数据库,所以我不能使用 rails 的验证来检查用户是否在浏览器上选择了一个文件。

但我想这样做,一个自己创建的模型:

# app/models/my_feature.rb
class MyFeature
  include ActiveModel::Model
  attr_accessor :my_file
  # How to do next?
end

我不知道如何在模型中编写验证代码。我试过了:

validates :my_file, presence: true

但没有奏效。是否还需要在控制器中检查验证?

【问题讨论】:

  • 您发布的代码看起来很合适。您能否详细说明它如何不起作用并发布您的控制器代码?在MyFeature 的实例上调用valid?(没有my_file 属性)应该返回false,并且在errors[:my_file] 中存在存在错误。

标签: ruby-on-rails file validation upload customization


【解决方案1】:

虽然这不是最好的主意,但您可以尝试一些类似自定义验证的方法。

class MyFeature
  include ActiveModel::Model
  attr_accessor :my_file
  validate :image_validation, :if => "my_file?"  
  def image_validation
    errors[:my_file] << "size can not be zero" if my_file.size > 0
  end
end

请查看此问题的链接similar

【讨论】:

  • 谢谢。我在我的控制器中试过这个:MyFeature.new(my_file: params[:my_file]).valid?,但它说:undefined method size' for nil:NilClass`。如果用户没有从视图中选择文件,则该参数将为 nil
  • 如果 params[:my_file] 为空或 nil,Valid 将不起作用。请尝试 params[:my_file].blank? .so 如果 params[:my_file] 为 nil,那么它将返回 true 作为大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2011-11-23
相关资源
最近更新 更多