【问题标题】:rails 3.1 papercliprails 3.1 回形针
【发布时间】:2011-10-28 07:57:59
【问题描述】:

我开始使用回形针插件,但我似乎无法在开发中显示图像。我在 config/environments/development.rb 文件中添加了以下内容:

Paperclip.options[:command_path] = "/usr/local/bin/"

我通过自制软件包管理器安装了 imagemagick 和 ghostscript。然后我将回形针 gem 添加到我的 gemfile 并运行 bundle install。然后我跑了

rails g paperclip carrier_data asset
rake db:migrate

然后我转到我的运营商数据模型并添加了

has_attached_file :asset

之后我更改了部分表单以添加生成的代码以便上传图像,我使用的是简单表单 gem,这是我输入的以下代码。

<%= simple_form_for [:carrier_datum, @carrier_datum], :url => carrier_datum_path, :html => { :multipart => true} do |f| %>
<div>   
  <%= f.input :asset, :as => :file, :label => "Upload File" %>
</div>

最后我去了展示页面并添加了以下代码以便我可以查看图像:

<%= image_tag @carrier_datum.asset.url %>

当我尝试创建新的承运人基准记录时,我收到以下消息:

No route matches {:action=>"show", :controller=>"carrier_data"}

日志如下所示:

ActionView::Template::Error (No route matches {:action=>"show", :controller=>"carrier_data"}):
1: <%= simple_form_for [:carrier_datum, @carrier_datum], :url => carrier_datum_path, :html => { :multipart => true} do |f| %>
2:   <% if @carrier_datum.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@carrier_datum.errors.count, "error") %> prohibited this carrier_datum from being saved:</h2>
app/views/carrier_data/_form.html.erb:1:in    `_app_views_carrier_data__form_html_erb__2372678434167691626_2513245300'
app/views/carrier_data/new.html.erb:3:in `_app_views_carrier_data_new_html_erb___55769200685419080_2513267980'
app/controllers/carrier_data_controller.rb:30:in `new'

我正在运行 rails 3.1,如果有帮助的话,我的数据库是 postgresql。

这是 rake 路由的输出

carrier_data GET    /carrier_data(.:format)           {:action=>"index", :controller=>"carrier_data"}
                     POST   /carrier_data(.:format)           {:action=>"create", :controller=>"carrier_data"}
   new_carrier_datum GET    /carrier_data/new(.:format)       {:action=>"new", :controller=>"carrier_data"}
  edit_carrier_datum GET    /carrier_data/:id/edit(.:format)  {:action=>"edit", :controller=>"carrier_data"}
       carrier_datum GET    /carrier_data/:id(.:format)       {:action=>"show", :controller=>"carrier_data"}
                     PUT    /carrier_data/:id(.:format)       {:action=>"update", :controller=>"carrier_data"}
                     DELETE /carrier_data/:id(.:format)       {:action=>"destroy", :controller=>"carrier_data"}
               pages GET    /pages(.:format) 

如果我删除简单的表单调用并使用像这样的常规表单部分表示法:

<%= form_for(@carrier_datum, :html => { :multipart => true}) do |f| %>
<div>   
    <%= f.label :asset, "Upload File:"%>
    <%= f.file_field :asset %>
</div>

我仍然遇到图像损坏问题,并且我的日志显示图像丢失。

【问题讨论】:

  • rake 路由输出是否符合您的预期?
  • 是的,看看上面的 rake routes 命令给了我什么。

标签: ruby-on-rails file-upload ruby-on-rails-3.1 paperclip


【解决方案1】:

我最终切换到carrierwave,我必须说它是一个更好的文件上传宝石。如果您使用的是 rails 3.1,这是一个更好的文件上传解决方案。

【讨论】:

    【解决方案2】:

    在模型中你需要指定上传文件的放置位置

    例如:

    has_attached_file :asset,
    :url  => "/assets/:id/:basename.:extension",
    :path => ":rails_root/public/assets/:id/:basename.:extension"
    

    在rails的公用文件夹中,创建一个文件夹“assets”。

    每次上传都会在里面创建带有 id 的文件夹和上传的文件。

    【讨论】:

    • 嗯,我将这些行复制并粘贴到我的模型中并重新启动了我的服务器,但我仍然遇到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多