ActiveRecord`from_csv`方法 - 如何使它更性感?

Hau*_*eth 0 ruby csv activerecord ruby-on-rails fastercsv

我编写了从CSV加载数据到DB的方法.对我而言,它有点不合时宜,而且远离DRY:

  def self.from_csv(data)
    c = Company.new
    FasterCSV.parse(data) do |row|
      c.name = row[0]
      c.street = row[1]
      c.street_number = row[2]
      c.apartament_number = row[3]

      c.city = row[4]
      c.post_code = row[5]
      c.post_office_city = row[6]

      c.nip = row[7]
      c.regon = row[8]
      c.vatin = row[9]
    end
  end
Run Code Online (Sandbox Code Playgroud)

如何使它更性感或可能已经有任何lib加载数据?

Sim*_*tsa 6

你可以把性感的女士放在上面:

#          ___
#   _  _.-"_< }
#    ""--"" 7(
#          /())
#         / )/
#        ^ ( \
#          / /
#         /.'
#        //
# ______/L___ sexii
def self.from_csv(data)
  #...
end
Run Code Online (Sandbox Code Playgroud)

但是,严肃地说,我看到你的代码唯一的问题是你不能轻易地重新排列属性,因为你必须手动更新所有索引.我更喜欢在数组中有一个有序的属性列表,并使用一些Ruby的动态方法调用:

def self.from_csv(data)
  company = new
  row = CSV.parse_line(data)
  [:name, :street, :street_number, :apartament_number,
   :city, :post_code, :post_office_city,
   :nip, :regon, :vatin].each_with_index do |name, i|
    company.send(:"#{name}=", row[i])
  end
  company
end
Run Code Online (Sandbox Code Playgroud)

另请注意,您需要在结尾处返回构造的公司实例,否则在调用时将获得一些随机值Company.from_csv.

  • 哈......真的很喜欢你的"性感女士"..:D (2认同)