我已经通过 DataMapper 映射出一个类并在数据库中,现在我正试图将我的第一个资源放入数据库中。
我有一个处理表单数据和文件内容的类。在那个类中,我正在创建第一个@variables
从参数传入的资源。传递到此资源的所有其他参数都来自@variables
具有表单值的参数。在这种情况下,@url
所讨论的变量 被设置为仅在几行之前的值。现在当我输入网址时:
rec = Post.new(
# more args
:filename_ogg => @url
)
rec.save
这就是杀手锏:这个文件中的每一行代码都可以@url
通过一个全局变量 ( $upload = Upload.new(file)
) 访问 ,除了这个资源创建者。在节省资源方面,它没有通过。但是,当我用@url
“RANDOM URL”之类的静态字符串替换时,它工作得很好。为什么?
这已经在 Ubuntu 12.04 下的 MRI 1.9.3 和 JRuby 1.6.7.2(1.9 模式)下进行了测试:
# #{user} edited out
class Upload
attr_accessor :file, :filename, :filename_ogg, :status, :title, :desc, :url
def initialize(file)
@file = file
@filename = @file[:filename].gsub(" ", "")
@filename_ogg = "#{@filename}.ogg"
#@url = "http://s3.amazonaws.com/#{user}/#{@filename_ogg}"
end
def downandup
# code
end
def convert(file, file_ogg)
# code
end
def upload(file_ogg)
# code
@url = "http://s3.amazonaws.com/#{user}/#{file_ogg}"
# title and desc are accessed through $upload.title/$upload.desc
rec = Post.new(
:title => @title,
:description => @desc,
:author_id => Random.rand(5),
:time_uploaded => Time.now,
:filename_ogg => @url,
:comments_table => Random.rand(10),
)
rec.save
end
end
该文件运行良好,但是当DataMapper将其放入数据库时,它不会进入,但是当替换为静态字符串时,数据会被存储。