首页 > 解决方案 > 如何在 Rails rake 任务中运行验证

问题描述

我有一个从 CSV 文件导入数据的 rake 任务,它工作得很好。现在的问题是我想向我的 mysql 表中已有的数据添加更多数据。现在这个 CSV 文件包含一些已经导入 mysql 的数据。如何跳过 CSV 和 mysql 中的数据?我想避免在 mysql 表中重复。这是我的工作 rake 任务。

namespace :populate_honda do
 desc "TODO"
  task pop_honda: :environment do
   vehicleid = Vehicle.where("name = 'Honda'").first.id
   Model.where(:vehicle_id => vehicleid).destroy_all
   honda_file = File.read(Rails.root.join('lib', 'tasks', 'honda.csv'))
   honda_list = CSV.parse(honda_file, :headers => true)
   honda_list.each do |m|
    t = Model.new
    t.name = m['model_name'].titleize
    t.vehicle_id = vehicleid
    t.createdate = Date.today
    t.user_id = 99
    t.save
   end
   puts honda_list.length.to_s + " Honda models successfully imported"
 end
end

我尝试validates_uniqueness_of :name在下面添加,namespace :populate_honda do但它给了我一个无方法错误。我怎样才能达到我的预期目标?

标签: ruby-on-railsruby

解决方案


您应该放入validates_uniqueness_of :nameModel文件,因为验证属于ActiveRecord类。


推荐阅读