所以我对这个问题做了几天的研究,普遍的共识是没有。所以我希望得到一个更具体的我的情况的答案......
我正在使用 Rails 将文件导入数据库。关于导入的一切都在工作,但我想给数据库本身一个属性,而不仅仅是每个条目。我正在创建文件的哈希,我认为将它分配给数据库(或类)是最简单的。
我创建了一个名为 Issue 的类(因此是一个“问题”数据库),每个条目都有几个属性。我想找到一种方法来添加一个类变量(至少,这是我认为最好的选择)到 Issue 以简单地存储哈希。我已经写了一个 rake 来导入文件,如果新文件与之前导入的文件不同(读取,如果哈希不同)。
desc "Parses a CSV file into the 'issues' database"
task :issues, [:file] => :environment do |t, args|
md5 = Digest::MD5.hexdigest(args[:file])
puts "1: Issue.md5 = #{Issue.md5}"
if md5 != Issue.md5
Issue.destroy_all()
#import new csv file
CSV.foreach(args[:file]) do |row|
issue = {
#various attributes to be columns...
}
Issue.create(issue)
end #end foreach loop
Issue.md5 = md5
puts "2: Issue.md5 = #{Issue.md5}"
end #end if statement
end #end task
我的模型如下:
class Issue < ActiveRecord::Base
attr_accessible :md5
@@md5 = 5
def self.md5
@@md5
end
def self.md5=(newmd5)
@@md5 = newmd5
end
attr_accessible #various database-entry attributes
end
我尝试了各种不同的方法来编写我的模型,但这一切都归结为这一点。无论我在模型中设置@@md5,都会变成永久更改,几乎就像一个常数。如果我在此处更改此值并刷新我的数据库,则会立即记录更改。如果我进入 Rails 控制台并执行以下操作:
Issue.md5 # => 5
Issue.md5 = 123 # => 123
Issue.md5 # => 123
但这种变化并没有承诺任何事情。一旦我退出控制台,事情就会再次回到“5”。这几乎就像我的班级需要一个 .save 方法。
此外,在 rake 文件中,您会看到我有两个打印语句,在解析之前和之后打印出 Issue.md5。第一个打印出“5”,第二个打印出新的正确哈希。所以 Ruby 认识到我正在更改这个变量,它从未保存在任何地方。
Ruby 1.9.3、Rails 3.2.6、SQLite3 3.6.20。
tl;博士我需要一种方法来创建一个类变量,并且能够访问它、修改它并重新存储它。
请问修复?谢谢!