1

我已经通过 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将其放入数据库时​​,它不会进入,但是当替换为静态字符串时,数据会被存储。

4

0 回答 0