我已经通过DataMapper将一个类映射到数据库中,现在我正在尝试将我的第一个资源放入数据库中。
我有一个处理表单数据和文件内容的类。在那个课程中,我正在创建第一个从params传入@variables
的资源。传递到此资源的所有其他args都来自@variables
,其中包含表单中的值。在这种情况下,有问题的变量@url
只能设置为前几行的值。现在当我输入网址时:
rec = Post.new(
# more args
:filename_ogg => @url
)
rec.save
这是杀手锏:此文件中的每个其他代码行都可以通过全局变量(@url
)访问$upload = Upload.new(file)
,但此资源创建者除外。在保存资源方面,它没有经过。但是,当我用“RANDOM URL。”之类的静态字符串替换@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将其放入数据库时,它不会进入,但是当用静态字符串替换时,数据将被存储。