Rails:使用回形针防止重复照片上传?

2023-11-24

如果用户尝试使用 Paperclip 将同一张照片上传到 Rails 应用程序两次,是否会引发验证错误? Paperclip 似乎没有提供此功能...

我正在使用 Rails 2.3.5 和回形针(明显地)。


解决方案:(或至少其中之一)

根据 Beerlington 的建议,我决定进行 MD5 校验和比较:

class Photo < ActiveRecord::Base
  #...
  has_attached_file :image #, ...

  before_validation_on_create :generate_md5_checksum
  validate :unique_photo
  #...

  def generate_md5_checksum
    self.md5_checksum = Digest::MD5.hexdigest(image.to_file.read)
  end

  def unique_photo
    photo_digest = self.md5_checksum
    errors.add_to_base "You have already uploaded that file!" unless User.find(self.user_id).photos.find_by_md5_checksum(photo_digest).nil?
  end

  # ...
end

然后我刚刚添加了一列到我的photos表称为md5_checksum,瞧!现在,如果您尝试上传同一张照片,我的应用程序会抛出验证错误!

不知道这有多高效/低效,所以欢迎重构!

Thanks!


对图像文件进行 MD5 怎么样?如果是完全相同的文件,则两个图像的 MD5 哈希值将相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails:使用回形针防止重复照片上传? 的相关文章

  • 请求完成时间大于 ActiveRecord 和 View 时间之和

    以下是一些示例请求完成时间 Completed 200 OK in 1054ms Views 10 8ms ActiveRecord 455 6ms Completed 200 OK in 1410ms Views 11 6ms Activ
  • 当一组工作人员完成时如何执行 Sidekiq 回调

    假设我有一个 Sidekiq 任务将产品处理到我的数据库 每个产品都按商店分组 因此我的代码的一个过于简化的示例将是这样的 stores each do store store products each do product Produc
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • Rails Active Admin css 与 Twitter Bootstrap css 冲突

    我对 Rails 资产管道有点陌生 所以我可能做错了什么 我正在尝试为我的后端使用 Active Admin 为我的前端应用程序使用 twitter bootstrap css 我将 bootstrap css 添加到 应用程序 资产 样式
  • 资产管道弃用警告 tsort.rb:226

    我的 Rails 4 2 在开发中运行良好 但在生产环境中我收到以下警告 DEPRECATION WARNING The configuration option config serve static assets has been re
  • 将 Rails 变量传递给液体可以在控制台中工作,但不在视图中

    我想将哈希传递给渲染方法 当我这样做时 在我的控制台中一切正常 object Object find params id hash object object to liquid template Liquid Template parse
  • 浏览器关闭时 Omniauth 会话过期

    在我的 Rails 3 应用程序中 我使用 Omniauth 进行用户身份验证部分 fb twitter 实际上我遵循这个 https github com RailsApps rails3 mongoid omniauth https g
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • 在 Rails 3 中渲染 Markdown 文本

    我想将 markdown 转换为 html 在我看来我有markdown some text variable 但我得到了错误undefined method markdown I added require BlueCoth 到envir
  • 获取嵌套参数

    我有一个带有嵌套参数的表单 在下面的示例中 如何获取控制器中的 amount whole 值 Parameters utf8 gt authenticity token gt KCmBI6RLh0LdUsM2r5H1vhNykS1IXecF
  • Bundle 说 gem 丢失了 - 但事实并非如此?

    背景 我正在维护contentRuby On Rails 站点 但我确实没有 Rails 的经验 当尝试运行 Rails 服务器时 rails s我明白了 在任何来源中均找不到 activesupport 3 2 0 Run bundle
  • 如何加载页面特定的rails 4 js文件?

    我正在阅读资产管道的 Rails 指南文档 它指出 CoffeeScript 页面特定生成的文件 如果清单上有 require tree 指令 则默认情况下可供用户使用 这对我不起作用我必须包括这个 在特定控制器上 我缺少什么 资产管道会将
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 如何为 ApplicationController 中 after_action 过滤器中的所有操作渲染 json?

    是否可以在 Rails ApplicationController 中创建一个 after filter 方法 该方法在每个操作上运行并呈现为 JSON 我正在构建一个 API 并且希望将控制器中的每个操作的输出呈现为 JSON 客户控制器
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • Rails/Ruby 合并两个具有相同键、不同值的哈希值

    我有两个想要合并的哈希值 它们看起来像这样 Hello gt 3 Hi gt 43 Hola gt 43 第二个哈希看起来像 Hello gt 4 Hi gt 2 Bonjour gt 2 我想合并这两个哈希数组 使结果看起来像 Hello
  • 如何在 Capybara 中 POST 到 URL?

    刚刚从 Cucumber Webrat 切换到 Cucumber Capybara 我想知道如何将内容 POST 到 Capybara 中的 URL 在 Cucumber Webrat 中我能够执行以下步骤 When I send to d
  • Heroku Rails 应用程序级别不记录日志

    我在 Heroku 上有一个 Rails 应用程序 它没有在应用程序级别进行日志记录 当前版本 红宝石1 9 3 导轨3 1 3 在 config environment development rb 中有以下几行 config logge
  • 仅针对 Rake 任务运行初始化程序

    我希望在执行 Rake 任务时运行某个初始化程序 但在运行 Rails 服务器时不运行 区分 Rake 调用和服务器调用的最佳方法是什么 Rake 允许您指定任务的依赖关系 最好的建议操作是将特定于 rake 的初始化放入其自己的任务中 而

随机推荐

  • 捆绑 .NET dll 以在无 .NET 的计算机中运行应用程序?

    AFAIK ngen将 MSIL 转换为本机代码 也称为 pre JIT 但我从未过多关注它对启动性能的影响 男士应用程序仍然需要 NET基类库 运行时 由于基类库拥有我们的 NET 程序集所需的一切 正确吗 是否可以将框架的 DLL 与我
  • 从 Laravel 中的多选表单中获取选定值

    要生成默认选择项目的下拉列表 请执行以下操作 echo Form select size array L gt Large M gt Medium S gt Small S 因此 我生成了一个默认选择多个项目的下拉列表 方法如下 echo
  • 如何使用 IMAP 和 php 将邮件附件下载到特定文件夹

    我正在开发一个网站 用户可以在其中邮寄票证并将任何类型的文件附加到特定的邮件 ID 我需要将邮件主题 内容和附件添加到数据库中 我正在使用 cron 来执行此操作 除了附件之外 一切都很完美 我看过一些创建下载链接的帖子 由于我使用的是 c
  • 如何捕获用户离开页面并取消它

    当用户离开 GWT 应用程序时 我想打开一个确认对话框并为他们提供留下的选择 即确认 您确定要离开此页面吗 是 否 我知道如何构建对话框 问题是 如何捕获用户离开页面的事件以及如何取消它 Daniel Call Window addWind
  • StreamingResponseBody 中的异常处理不起作用

    我试图捕获在我的实现中抛出的异常StreamingResponseBody 我可以看到类内部抛出异常 但是我的处理似乎有效 但是我无法获取自定义消息 我的响应代码是200 GetMapping path test produces appl
  • Android AppWidget 在重新启动之前不会显示在蜂窝菜单中

    我已经为 Honeycomb 创建了一个 AppWidget 它运行良好 但首次安装时 它不会显示在 Widgets 菜单中 因此无法将其添加到主屏幕 重新启动设备将使其显示出来 或者在开发过程中 从 Eclipse 发送两次将使其显示出来
  • 保存到用户“我的文档”中的文件夹

    当我为应用程序创建安装程序时 我将在 我的文档 中创建一个文件夹 该文件夹将用于保存应用程序中的文件 我希望我的应用程序在保存文件和打开文件对话框打开时自动提取此目录 现在我的问题是 我需要使用什么字符串才能访问 我的文档 中的文件夹 我知
  • 在 Android Studio 中导入模块

    如何在 Android Studio 中导入外部模块 名为 ViewPagerIndicator 在 Android Studio 3 3 及更低版本中导入模块的步骤 Go to File gt gt New gt gt 导入模块 选择要导
  • ios url从邮件重定向到应用程序

    是否可以使用通过邮件发送的 URL 来启动我的应用程序 例如 我有用户个人资料 用户想要邀请他们的朋友进入应用程序 他们发送一封电子邮件 其中包含一些网址 例如 通过此链接加入我 http appname sender id 25 some
  • 复制和克隆有什么区别?

    这个问题似乎暗示这只是一个实现细节 memcpyvs 但我找不到任何关于差异的明确描述 Clone专为任意重复而设计 Clone类型的实现T可以执行创建新对象所需的任意复杂操作T 它是一个正常特征 除了在前奏中 因此需要像正常特征一样使用
  • 基于一个代码库/项目创建演示版和完整版应用程序

    我在一个项目中使用 Eclipse 开发了一款 Android 应用程序 它是结构化的 来自 iPhone 因此一个常量定义它是演示版还是完整版 现在我遇到的问题是 每次我想创建演示版本时 我都需要更改常量 但还需要使用不同的包名称制作项目
  • BitBucket:主机密钥验证失败

    我想将远程存储库克隆到本地计算机 我使用了命令 git clone email protected
  • Mac OSX El Capitan 上的 JDK 7/JavaFX 2 应用程序

    我刚刚升级到 El Capitan 在启动在 JDK1 7 0u79 Oracle 提供的最新版本 下运行的自定义 JavaFX2 应用程序时遇到问题 启动应用程序时 我收到此异常 Exception in thread main java
  • Jmeter远程连接抛出“连接拒绝主机”

    我在 unbundu 机器中使用 JMeter 设置了分布式负载测试环境 gt Master 运行JMeter GUI的系统 控制各个slave gt Slave 运行jmeter server的系统 接收来自master的命令并向被测服务
  • 在 Windows 7 下使用 python 3.3 (Anaconda) 构建最小的 cython 文件

    当我尝试在 Windows 7 下使用 Python 3 3 Anaconda 3 构建最小的 Cython 文件 test pyx 时 我收到一个奇怪的错误 C Users myname Test cython gt python set
  • 如何在 Swift 框架中使用 Cocoapods?

    我正在尝试使用 Cocoapods 中的一些库在 Swift 中为 iOS 创建一个新的 Cocoa Touch 框架 但我无法让它工作 我知道有一些关于此的悬而未决的问题 但它们似乎都不能解决我的问题 出于测试目的 我刚刚创建了一个空的
  • 用python求解非线性方程组

    我可以用Python中的参数求解非线性方程组吗 有示例或教程吗 我可以在 Maple 中轻松完成此操作 但我的特定系统的表达式非常大 复制它们非常困难 例子 sigma y x 0 x rho z y 0 x y beta z 0 您应该得
  • 替换模式内所有出现的地方

    我有一个像这样的字符串 some text other text and some other text this should not be replaced but this should 我希望它成为 some text other
  • 使用 Electron 嵌入 Mongodb

    我将 MongoDB 源代码保存在电子源代码中 并使用以下命令运行 MongoDB const app require electron app const child process require child process const
  • Rails:使用回形针防止重复照片上传?

    如果用户尝试使用 Paperclip 将同一张照片上传到 Rails 应用程序两次 是否会引发验证错误 Paperclip 似乎没有提供此功能 我正在使用 Rails 2 3 5 和回形针 明显地 解决方案 或至少其中之一 根据 Beerl