Avatar无法使用paperclip和aws-sdk gem上传

4
我有一个关于上传头像的问题。我第一次使用时可以成功上传,但是这次似乎不行了。我使用了paperclip和aws-sdk gem,并且按照这里的说明进行了设置。
我已经测试了两个存储桶,一个是标准的us-location,另一个是eu-west-1位置。但两者都没有起作用。 以下是我所有相关的代码:

config/s3.yml

development:
  bucket: ***
  access_key_id: ***  
  secret_access_key: ***
test:
  bucket: ***
  access_key_id: ***  
  secret_access_key: ***
production:
  bucket: ***
  access_key_id: ***  
  secret_access_key: ***

app/model/art.rb

class Art < ActiveRecord::Base
  attr_accessible :created_at, :description, :name, :avatar
  has_attached_file :avatar,
      :storage => :s3,
      :s3_credentials => "#{Rails.root}/config/s3.yml",
      :url => ':set_alias_url',
      :path => "/:style/:id/:filename.:extension",
          :bucket => '***'

end

app/controller/arts_controller.rb

class ArtsController < ApplicationController 
...
def create
      @art = Art.new(params[:art])
      if @art.save
          flash[:notice] = "sucessfully saved upload" 
          redirect_to arts_path
      else 
          flash[:notice] = "error" 
          render "new"
      end

    ...

app/views/arts/new.html.erb

<h1>Arts#new</h1>
<p>Find me in app/views/arts/new.html.erb</p>
<%= form_for(@art, :url => arts_path, :html => { :multipart => true }) do |f| %>
    <%= f.label :name %> <br/>
    <%= f.text_field :name %> <br/>

    <%= f.label :description %> <br/>
    <%= f.text_field :description %> <br/>

    <%= f.label :avatar %> <br/>
    <%= f.file_field :avatar %> <br/>
    <%= f.submit %>
<% end %>

我已经搜索了两天的网络,但是我无法找到我的错误。这是服务器的响应:

POST "/arts/new" for 127.0.0.1 at 2012-12-19 12:11:39 +0100
    Processing by ArtsController#new as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZyZFfSaTl9CQpL5kOXyt/rcoi+SCuNp5/deCYda83sE=", "art"=>{"name"=>"asdf", 
"description"=>"asdf", 
"avatar"=>#<ActionDispatch::Http::UploadedFile:0x0000000296e0b8 @original_filename="lakritz10.jpg", 
@content_type="image/jpeg", 
@headers="Content-Disposition: form-data; name=\"art[avatar]\"; filename=\"lakritz10.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20121219-5804-1rnvkmj>>}, 
"commit"=>"Create Art

有人能帮我修复这个问题吗?

提前感谢。

编辑:似乎即使没有附件,也没有任何东西保存在数据库中。这很奇怪...

编辑_解决方案:为了解决我的特定问题,我不得不更改routes.rb。 我之前假设过这个条目

match "arts/new", :to => "arts#new", :as => 'arts'

本来以为这样就可以实现目标,但事实并非如此。我不得不将这行代码改为:

resources :arts

由于我还不完全理解路由是如何工作的,因此无法解释它。


提交表单时传递了哪些参数,请在控制台中检查。 - Richlewis
好的,这是一个路由问题。我将我的路由从:arts更改为resources :arts,现在一切都完美地运行了。我想我必须学习如何工作和手动添加put/get/match路由。不过还是谢谢你的回复。 - schnika
2
@schnika。请将您的解决方案添加为答案,以免出现未回答的情况。 - John
1个回答

0

你的行:

match "arts/new", :to => "arts#new", :as => 'arts'

只创建到new操作的路由。它将arts_path映射到arts/new,这是您表单的目标。您真正需要提交表单到arts#create,这是资源自动为新对象执行的POST


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接