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 がそれをデータベースに入れるときは入りませんが、静的な文字列に置き換えるとデータが保存されます。