Rails Seed-Fu作家为什么种子被评论出来?

所以,这是我的自定义rake任务:

task :backup => :environment do |t| SeedFu::Writer.write('/path/to/file.rb', class_name: 'Category', constraints: [:id] do |w| Category.all.each do |x| w << x end end end 

以下结果文件包含:

 # DO NOT MODIFY THIS FILE, it was auto-generated. # # Date: 2014-06-15 21:08:13 +0700 # Seeding Category # Written with the command: # # /home/dave/.rvm/gems/ruby-2.1.2/bin/rake backup # Category.seed(:id, #, #, # ) # End auto-generated file. 

问题:为什么种子文件被注释掉了?

谢谢!

所以,这是一个基本的字符串操作。

当我仔细阅读他们的源代码时, seed方法接受Hash ,而不是对象。 所以,我只是将对象翻译为其Hash等价物:

 task :backup => :environment do |t| SeedFu::Writer.write('/path/to/file.rb', class_name: 'Category', constraints: [:id] do |w| Category.all.each do |x| w << x.as_json end end end 

请注意,您可以使用.attributes.as_json ,但我在某处读到.attributes实际上比.as_json需要更多的时间。

之后,我遇到了另一个问题: Datetime列。 转换为JSON时, 不引用Datetime列 。 所以我做的是:

  1. 将列名称( Datetime类型)存储到数组中。
  2. 将当前对象的Hash存储到本地变量。
  3. 使用.to_s (在局部变量中)将Datetime值转换为String
  4. 将修改后的局部变量输出到writer对象。

希望这可以帮助。

遇到完全相同的问题,没有引用注释的输出和日期时间列。 似乎ActiveSupport::JSON可以一举两得。

 require 'seed-fu' j = ActiveSupport::JSON SeedFu::Writer.write("#{Rails.root}/db/dump_seeds/lectures.rb",{ class_name: 'Lecture', constraints: [:id, :name]}) do |writer| Lecture.all.order('id').each do |e| writer << j.decode(j.encode(e)) end end