0

我正在通过 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 # => 无

我错过了什么?

4

0 回答 0