铁轨变了?尽管它不应该返回true

时间:2013-09-24 10:33:13

标签: ruby-on-rails ruby csv

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

我错过了什么?

0 个答案:

没有答案