我正在通过 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 # => 无
我错过了什么?