Rails 3 -NoMethodError(未定义的方法`original_filename

时间:2010-10-25 17:42:11

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-plugins paperclip uploadify

我正在使用Rails 3,Uploadify将图像发送到S3。

现在上传的所有图片都有MIME:application / octet-stream

我想解决这个问题但是我收到了以下错误:

NoMethodError (undefined method `original_filename' for #<ActiveSupport::HashWithIndifferentAccess:0x107c81998>):
  app/models/photo.rb:29:in `upload_file='
  app/controllers/photos_controller.rb:15:in `upload'
  app/middleware/flash_session_cookie_middleware.rb:14:in `call'

我认为这是因为所有教程都没有Rails 3友好。有人有主意吗?这是代码:

# Controller

def create
  @photo = Photo.new(:upload_file => params[:photo][:image])
  ...
end

# Model

class Photo < ActiveRecord::Base  
  require 'mime/types'
  ...
  def upload_file=(data)
    data.content_type = MIME::Types.type_for(data.original_filename).to_s
    self.image = data
  end 
end 

1 个答案:

答案 0 :(得分:1)

我不熟悉Uploadify,但它似乎只是一个javascript生成器......

您正在为#upload_file =传递一个params值作为'data'。然后你在params [:photo] [:image]上调用一个方法(#original_filename)。 Rails说params [:photo] [:image]没有这样的方法。

'mime / types'中是否有某种File类?你应该先创建那个File对象吗?

file = File.new(params[:photo][:image])

然后更改该文件属性:

file.content_type = ...

编辑:

您使用的是回形针宝石吗?您正在使用的教程是使用paperclip。所以在“@ asset.file_content_type = MIME :: Types.type_for(@ asset.original_filename)。to_s”中,我认为@asset是paperclip的File类的一个实例,它有一个#original_filename方法。但是,我没有在回形针文档中看到#file_content_type =()方法。