1

DataMapper を介して既にマップされたクラスがあり、データベースに最初のリソースを作成しようとしています。

フォーム データとファイルを処理するクラスがあります。そのクラスでは@variables、params から渡された最初のリソースを作成しています。このリソースに渡される他のすべての引数は@variables、フォームの値を持つものから取得されます。この場合、@url問題の変数 は、数行前の値に設定されています。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