简体   繁体   English

如何在 Rails rake 任务中运行验证

[英]How to run validations in Rails rake task

I have a rake task that imports data from a CSV file, its working very well.我有一个从 CSV 文件导入数据的 rake 任务,它运行良好。 Now problem is I want to add more data to already existing data in my mysql table.现在的问题是我想向我的 mysql 表中已经存在的数据添加更多数据。 Now this CSV file contains some data that is already imported into mysql.现在这个 CSV 文件包含一些已经导入到 mysql 中的数据。 How can I skip data that is in CSV and in mysql already?如何跳过 CSV 和 mysql 中的数据? I want to avoid duplicated in mysql table.我想避免在 mysql 表中重复。 Here is my working rake task.这是我的工作耙任务。

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

I tried adding validates_uniqueness_of :name just below namespace :populate_honda do but its giving me a no method error.我尝试在namespace :populate_honda do下方添加validates_uniqueness_of :name namespace :populate_honda do但它给了我一个无方法错误。 How can I achieve my intended goal?我怎样才能实现我的预期目标?

您应该将validates_uniqueness_of :name放在Model类文件中,因为验证属于ActiveRecord类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM