Ruby不允许动态字符串作为参数

时间:2012-08-06 18:05:39

标签: ruby datamapper

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

0 个答案:

没有答案