Rails3 carrierwave无法上传
我试过这个教程:http://railscasts.com/episodes/253-carrierwave-file-uploads?autoplay=true。 我无法得到这个工作。我的文件没有上传,但我可以看到数据已发送到控制器。Rails3 carrierwave无法上传
class PublicationsController < ApplicationController
respond_to :html, :js, :json, :xml
def create
@publication = Publication.create(params[:publication])
...
end
end
UPDATE:
<form novalidate="novalidate" method="post" id="new_publication" enctype="multipart/form-data" class="simple_form publication" action="/sl/publications" accept-charset="UTF-8"><div style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8"><input type="hidden" value="vny2UjREsnQLZkUjH3zNxC8Cz5tvG/sAcllyjzZ+PWo=" name="authenticity_token"></div>
<div class="inputs">
<div class="input string required"><label for="publication_full_name" class="string required"><abbr title="obvezno">*</abbr> Name</label><input type="text" size="50" required="required" name="publication[full_name]" maxlength="255" id="publication_full_name" class="string required"></div>
<div class="input string email required"><label for="publication_email" class="email required"><abbr title="obvezno">*</abbr>Mail</label><input type="email" size="50" required="required" name="publication[email]" maxlength="255" id="publication_email" class="string email required"></div>
<div class="input string required"><label for="publication_subject" class="string required"><abbr title="obvezno">*</abbr>Subject</label><input type="text" size="50" required="required" name="publication[subject]" maxlength="255" id="publication_subject" class="string required"></div>
<div class="input text required"><label for="publication_text" class="text required"><abbr title="obvezno">*</abbr>Text</label><textarea rows="20" required="required" name="publication[text]" id="publication_text" cols="40" class="text required"></textarea><span class="hint">You can uncomment the line below if you need to overwrite.</span></div>
<div class="input file required"><label for="publication_attachment" class="file required"><abbr title="obvezno">*</abbr> Attachment</label><input type="file" required="required" name="publication[attachment]" id="publication_attachment" class="file required"></div>
</div>
<div class="buttons">
<input type="submit" value="Create Publication" name="commit" id="publication_submit" class="button">
</div>
</form>
我可以看到PARAMS传递给控制器是这样的:
Started POST "/en/publications" for 127.0.0.1 at Thu May 26 16:17:25 +0200 2011
Processing by PublicationsController#create as HTML
Parameters: {"commit"=>"Create Publication", "authenticity_token"=>"vny2UjREsnQLZkUjH3zNxC8Cz5tvG/sAcllyjzZ+PWo=", "utf8"=>"\342\234\223", "publication"=>{"attachment"=>#<ActionDispatch::Http::UploadedFile:0x106d660a8 @headers="Content-Disposition: form-data; name=\"publication[attachment]\"; filename=\"photo.jpg\"\r\nContent-Type: image/jpeg\r\n", @content_type="image/jpeg", @original_filename="photo.jpg", @tempfile=#<File:/var/folders/yX/yXe3dRdgGO8II-+SWIzLRE+++TI/-Tmp-/RackMultipart20110526-35653-1sr4hnw-0>>, "text"=>"asd", "subject"=>"asd", "full_name"=>"asd", "email"=>"[email protected]"}, "locale"=>"en"}
型号:
class Publication < ActiveRecord::Base
mount_uploader :attachment, PublicationUploader
validates :subject,
:presence => true
validates :text,
:presence => true
validates :full_name,
:presence => true
validates :email,
:presence => true,
:email => { :if => 'email.present?' }
# validates :attachment,
# :integrity => true,
# :processing => true
end
上传类(默认) :
class PublicationUploader < CarrierWave::Uploader::Base
# Include RMagick or ImageScience support:
# include CarrierWave::RMagick
# include CarrierWave::ImageScience
# Choose what kind of storage to use for this uploader:
storage :file
# storage :s3
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# Provide a default URL as a default if there hasn't been a file uploaded:
# def default_url
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
# end
# Process files as they are uploaded:
# process :scale => [200, 300]
#
# def scale(width, height)
# # do something
# end
# Create different versions of your uploaded files:
# version :thumb do
# process :scale => [50, 50]
# end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(jpg jpeg gif png pdf doc txt)
end
# Override the filename of the uploaded files:
# def filename
# "something.jpg" if original_filename
# end
end
的Gemfile
source 'http://rubygems.org'
gem 'rails', '3.0.7'
gem "hirb"
gem "haml"
gem "compass"
gem "asset_tags"
gem "js_erb"
gem "jammit"
gem 'cat_router', '>=0.2.0'
gem 'devise'
gem 'i18n_routing'
gem 'simple_form', '>=1.4'
gem 'carmen'
gem 'carrierwave', '>=0.5.4'
group :development, :test do
gem 'sqlite3'
gem 'capistrano'
gem "win32-open3", :platforms => :mswin
gem 'seed-fu'
end
group :staging, :production do
gem 'mysql'
end
帮助?
添加include CarrierWave::RMagick
串什么的轨道控制台返回下面的代码:
Publication.create!(:attachment => File.new("test.jpg"))
确实是创建发布并保存附件?当然,你必须在rails文件夹中有“test.jpg”文件。
+1。您的其他验证要求是否得到满足?添加!如果存在验证问题,而不是仅仅静默地回滚,则会产生异常。 – bensie 2011-05-26 15:55:21
在PublicationUploader
模型
哼...为什么?我不使用任何这样的功能(上传文件如pdf,jpg,不处理) – xpepermint 2011-05-26 14:37:01
好的......我做了,但没有帮助。 – xpepermint 2011-05-26 14:41:56
嗯...我真的不明白 – bor1s 2011-05-26 14:42:55
那么:multipart =>你的表单中的true? – bor1s 2011-05-26 14:10:11
我有这一切(如在教程中)。 – xpepermint 2011-05-26 14:12:26
你可以在这里打印从表单传递的参数吗? – bor1s 2011-05-26 14:14:24