Carrierwave:store_path中的model.id错误

时间:2011-09-16 14:27:25

标签: ruby-on-rails ruby carrierwave

我正在尝试编写一个方法来存储来自红宝石工作者内部给定网址的图像。它出现在我的Rails应用程序中,我在其中显示对象图像。以下是我的想法:

@message = Message.create!
my_uploader = PhotoUploader.new
photo = open(image_url)
@message[:photo] = my_uploader.store!(photo)
@message[:photo] = my_uploader.filename
@message.save!

PhotoUploader:

def store_dir
  Rails.env.production? ? (primary_folder = "production") : (primary_folder = "test")
  "#{primary_folder}/media/#{model.id}" 
end

Message类:

class Message < ActiveRecord::Base
  attr_accessible :content, :photo, :user_id
  mount_uploader :photo, PhotoUploader
end

model.id在存储路径中返回错误。即使保存后该模型也为零,文件存储在#{primary_folder}/media

1 个答案:

答案 0 :(得分:1)

我认为您没有从模型中调用store!,这就是model.id不起作用的原因,因为modelnil

这可能会为你做到:

@message = Message.create!
photo = open(image_url)
@message.photo = PhotoUploader.new
@message.photo.store!(photo)
@message.photo = @message.photo.filename
@message.save!

我在rails控制台中尝试了这个,@message[:photo].store!(photo)给出了同样的错误,但@message.photo.store!(photo)有效。