csv上传更改数据的值,同时保存

时间:2017-09-18 15:56:45

标签: ruby-on-rails

我有一个我试图上传到数据库的csv。我能够读取csv并获取哈希值并将值插入数据库。我遇到的问题是其中一个哈希值将活动字段设置为" false"但是当它插入数据库时​​,它会插入' true'。以下是该代码。

型号代码:

 def self.import(csv_file)
  CSV.foreach(csv_file, headers: true) do |row|
   project_hash = row.to_hash
   Project.create! row.to_hash
  end
end

控制器代码:

  def import_projects
   projects = Project.import(params[:file].path)
   flash[:notice] = "Projects successfully imported"
   redirect_to :action => :index   
 end

project_hash = {" name" =>" Dog"," project_id" => nil," active" =>"假"}

所以当哈希保存到数据库中时,条目看起来就像这样。

name => ' Dog',project_id ='',active =' true'

请有人告诉我为什么活动列的错误值会被插入为真。

1 个答案:

答案 0 :(得分:1)

我的理解,ruby考虑变量内部是否有值是真的,SO中有一篇文章讨论真/假,这里是the one for your understanding.

至于你上面的问题,我建议使用回调来解决你的问题,如下面的示例

<强> your_model.rb

before_validation :convert_boolean
...

def convert_boolean
  self.active = false if self.active == "false"
end