Rails 3 -NoMethodError (неопределенный метод `original_filename - PullRequest
1 голос
/ 25 октября 2010

Я использую 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 Ответ

1 голос
/ 26 октября 2010

Я не знаком с Uploadify, но, похоже, это просто генератор javascript ...

Вы передаете значение params в качестве 'data' для # upload_file =.Затем вы вызываете метод (#original_filename) для params [: photo] [: image].Rails говорит, что params [: photo] [: image] не имеет такого метода.

Есть ли какой-нибудь класс File в 'mime / types'?Если вы сначала создаете этот объект File?

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

, а затем измените атрибут этих файлов:

file.content_type = ...

EDIT:

Используете ли вы скрепку?Учебник, который вы используете, использует скрепку.Таким образом, в "@ asset.file_content_type = MIME :: Types.type_for (@ asset.original_filename) .to_s", я думаю, @asset является экземпляром класса File paperclip, у которого действительно есть метод #original_filename.Тем не менее, я не вижу метод # file_content_type = () в документации по скрепке.

...