【问题标题】:Rails file upload how to know if the image is sentrails文件上传如何知道图片是否发送
【发布时间】:2012-03-13 03:30:52
【问题描述】:

我使用 file_column 插件来上传表单中的图像。图像字段名称为“图像”。我需要知道上传表单时是否发送了文件(图片是可选的)。实际上,我想在更新图像时(在 after_validation 回调中)更新另一个字段(image_updated_at)。

所以,我只想知道是否发送了图像来更新此字段。有图片时params的内容是:

"image"=>#<ActionDispatch::Http::UploadedFile:0x10750dae0 @tempfile=#<File:/var/folders/p1/74mh4dd95zj0lpc42zm0h0kw0000gn/T/RackMultipart20120222-7745-s7rsy4-0>, @headers="Content-Disposition: form-data; name=\"wine[image]\"; filename=\"montenero2006.jpg\"\r\nContent-Type: image/jpeg\r\n", @content_type="image/jpeg", @original_filename="montenero2006.jpg">, 

我只是想测试图像是否发送。测试什么而不是 self.image ?

after_validation :set_image_date

def set_image_date
  self.image_updated_at = Time.now() if self.image
end

【问题讨论】:

    标签: ruby-on-rails upload


    【解决方案1】:

    检查 db 属性的变化 after_validation :set_image_date

    def set_image_date
      self.image_updated_at = Time.now() if changes[:image_file_name]
    end
    

    如果您不确定上述解决方案,那么以下是可靠的解决方案

    class Wine < ActiveRecord::Base
    
       def initialize(*args)
        args.merge!(:image_updated_at => Time.now) if args[:image].present?
        super
      end
    end
    

    【讨论】:

    • 哼,不工作。当我发送新图像时,字段 image_updated_at 从未改变。
    • 能列出与model关联的table的列吗
    • 我有很多列,但只有一个用于发送名为“image”的图像。
    • 事实上,如果图像被发送/存在,则参数[:wine][:image] 存在,否则不存在。
    • 我在控制器本身找到了解决方案:@wine.update_attributes(:image_updated_at =&gt; Time.now) if params[:wine][:image]
    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2010-11-07
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多