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列 。 所以我做的是:
- 将列名称(
Datetime
类型)存储到数组中。 - 将当前对象的
Hash
存储到本地变量。 - 使用
.to_s
(在局部变量中)将Datetime
值转换为String
- 将修改后的局部变量输出到
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