ruby-on-rails - 回形针上传yml文件

标签 ruby-on-rails ruby paperclip yaml

我在通过回形针上传 yml 文件时遇到问题。这是我尝试这样做的方式:

在我的模型中我有:

has_attached_file :search_config
validates_attachment_content_type :search_config, content_type: ['text/yaml', 'application/x-yaml', 'text/x-yaml', 'application/yaml', 'text/plain']

在我看来:

<%= form_for @search, :html => { :multipart => true } do |f| %> 

<fieldset>
    <legend>Skills</legend>
    <%= hidden_field_tag :type, 'recommendation' %>
    <%= f.file_field :search_config %>
    <%= f.submit 'Save', class: 'btn btn-primary' %>
</fieldset>

在我的 Controller 中:

def create
    @search = MailingSearch.new(params[:mailing_search])    
    if @search.save
        redirect_to action: :index, notice: 'Your search was successfully created. Search results will be send via email soon.'     
    else
        render action: :new
    end
end

我得到一个错误,那个

search_config_content_type=>["is invalid"]

当我尝试从控制台创建文件时(我使用的是同一个文件):

ms = MailingSearch.new
ms.search_config = File.open('tmp/test.yml')
ms.save

它有效。这里可能有什么问题?

最佳答案

使用调试器检查 Controller 中的 params[:mailing_search]

我怀疑 params[:mailing_search][:search_config].content_type 将是 application/octet-stream 因为 .yml 文件被视为二进制文件。

由于您不允许 application/octet-stream 作为有效的内容类型,这就是您收到错误的原因。

当您尝试通过控制台时,内容类型不会被浏览器覆盖,这就是它起作用的原因。

在您的 Controller 中,在构建@search 之前,您可以使用以下方法将参数中的内容类型重置为文件的 MIME 类型:

params[:mailing_search][:search_config].content_type = MIME::Types.type_for(params[:mailing_search][:search_config].original_filename).first.content_type

这应该保留 text/x-yaml 作为您允许有效的文件的内容类型。

关于ruby-on-rails - 回形针上传yml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124553/

相关文章:

ruby-on-rails - 如何运行文件夹种子中的所有文件?

ruby-on-rails - 在 Rails : Paypal, 纯商家帐户/网关或 Chargify 之类的系统中实现我们的计费系统?

ruby - Enumerable 循环上的计数迭代

javascript - 如何有条件地将 ruby​​ 变量分配给 javascript 变量?

ruby-on-rails - Rails 回形针,多个不同类型(PDF、图像、文档...)

html - 如何从社交媒体缩略图中排除 Jumbotron 图像?

ruby-on-rails - Ruby API 响应为小驼峰式

ruby - 更改字符串的特定索引,必要时进行填充

ruby-on-rails - 添加回形针新样式不影响旧上传的图像

ruby-on-rails - 回形针 | ImageMagick - 无法使用自定义高度调整图像大小