【问题标题】:Paperclip - Associated upload validations always lead to "invalid"回形针 - 相关的上传验证总是导致“无效”
【发布时间】:2014-04-29 06:32:15
【问题描述】:
Rails version: 4.1
Paperclip version: 4.1.1

我正在使用上传模型来处理所有其他模型的附件,因为在大多数情况下:

model.rb:
has_many :uploads
validates_associated :uploads

目前,我的回形针附件有两个验证。内容:

# list of file types presented as ... for demonstration only
validates_attachment :attachment, content_type: { content_type:[                         
           "application/pdf",
           "application/vnd.ms-excel","application/excel",
           "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
           "application/vnd.oasis.opendocument.spreadsheet",
           "application/vnd.oasis.opendocument.text",
           "application/vnd.oasis.opendocument.presentation",
           "application/msword", "text/rtf", "text/plain",
           "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
           "application/mspowerpoint",
           "application/vnd.openxmlformats-officedocument.presentationml.presentation",
           "application/x-rar-compressed", "application/x-rar", "application/zip"]}

以及运行 clamdscan(病毒检查)的自定义验证:

validate :clean_file

def clean_file
    errors.add :base, "File #{self.attachment.queued_for_write.inspect} is infected!" if
    !self.attachment.queued_for_write.blank? &&
    ("#{system "clamdscan - < \"#{self.attachment.queued_for_write[:original].path}\" | grep FOUND" }")
end

两种验证都按预期工作。然而,错误总是落在“上传无效”或我在语言环境文件中提供的任何字符串。

errors.add :base 似乎被忽略了。

编辑:显示的错误消息来自模型,而不是来自上传。

如何传递实际显示的错误消息????

谢谢

Edit2:添加了内容验证字符串

已解决:使用这种方法
validates associated with model's error message

【问题讨论】:

  • 既然您现在已经解决了这个问题,请在解决方案中发布答案(提供比链接更详细的信息)或删除问题。这样它就不会显示为没有答案的“开放式”问题,并且如果您提供解决方案,将来可以帮助其他人。

标签: ruby-on-rails validation paperclip


【解决方案1】:

我在上面发帖说这个问题现在已经解决了。

这是部分正确的。上述解决方案仅适用于在列表中首先提供关联对象的情况下进行渲染。
因此,我没有使用这个解决方案,而是尝试了一个新的解决方案,这次在视图级别,因为产生了错误但没有渲染,而且效果很好。

像这样渲染一个 _errors 部分(“垃圾”代码被删除):

<% if current_object.errors.any? %>
    <ul>
        <% current_object.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
        <% end %>
        <% if current_object.uploads.any? %>
            <% current_object.uploads.each do |u| %>
                <% u.errors.full_messages.each do |umsg| %>
                    <li><%= umsg %></li>
                <% end %>
            <% end %>
        <% end %>
    </ul>
<% end %>

我的所有错误都显示出来了。终于!

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多