我可以使用Attachment_fu将图像文件作为附件上传,但当我尝试编辑/修改已经上传的图像时,它不起作用。在我的控制器中,我有这个:
def update
@sponsor_account = SponsorAccount.find( params[:id] )
if params[:showcase_category_image_file] &&
!params[:showcase_category_image_file].blank?
@sponsor_account.showcase_category_image =
ShowcaseCategoryImage.new(:uploaded_data =>
params[:showcase_category_image_file])
***This logs - Now the file name is: ***
Rails.logger.info("Now the file name is: #
{@sponsor_account.showcase_category_image.filename}")
end
@sponsor_account.update_attributes( params[:sponsor_account] )
if @sponsor_account.save
flash[:notice] = "Showcase category #{@sponsor_account.name} was updated!"
else
flash[:errors] = @sponsor_account.errors
end
redirect_to sponsor_accounts_path
end
ShowcaseCategoryImage的定义如下:
has_attachment :content_type => :image,
:storage => :file_system,
:max_size => 5.megabytes,
:thumbnails => { :large => [350, 100], :medium => [200, 90], :thumb =>
[35,35], :preview => [60,60] }
validates_as_attachment
该视图有一个file_field_tag,如下所示:
<%= file_field_tag :showcase_category_image_file%>
我的SponsorAccount模型说:
has_one :showcase_category_image, :as => :owner, :dependent => :destroy
validates_presence_of :showcase_category_image, :on => :create
几乎类似的代码在"create"中运行良好,但在"update"操作中,如果已经有值,则此代码不起作用。
我收到以下错误消息:1089ms内完成500个内部服务器错误ActionView::Template::Error(nil:NilClass的未定义方法"public_filename"):显然,这个错误出现在索引操作中,它试图列出所有记录及其附件。由于此附件在更新后为空,因此会在重定向到部分中引发此错误。
我使用的是REE1.8.7和轨道3.2.9
请帮忙!
当我在"视图"中添加:multipart=>true时,这个问题就解决了。我使用的是rails 3.2.9,rails api对"file_field_tag"有这样的描述:
file_field_tag(name,options={})链接创建文件上载字段如果您使用文件上传,那么您还需要为表单标记设置多部分选项: