我正在通过rake任务将数据从CSV文件导入到Rails 3.2.14应用程序(在Ruby 2.0.0下),如下所示:
CSV.foreach("import.txt", col_sep: ";", encoding: "ISO8859-1:UTF-8") do |row|
v = Variant.where(:sku => row[1]).first
unless v.nil?
p = v.product
else
p = Product.new()
end
p.name = row[2]
p.sku = row[1]
p.description = row[3] + row[4]
if p.changed?
if p.save
puts "Product #{p.name} created"
else
p.errors.each do |error|
puts error
end
end
end
end
end
我只想将新值存储到数据库中,当某些内容发生变化但是已经更改? - 方法总是返回true。
p.name == row[2] #=> true
p.name.class == row[2].class #=> true
但是:
p.name = row[2]
p.changed? #=> true
那怎么可以改变?回归真的吗?文档:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html 说:
分配相同的值会使属性保持不变:
person.name ='比尔'
person.name_changed? #=>假
person.name_change#=>零
我错过了什么?