【问题标题】:Rails Seed-Fu Writer why seed got commented out?Rails Seed-Fu Writer 为什么种子被注释掉了?
【发布时间】:2014-08-05 11:56:04
【问题描述】:

所以,这是我的自定义 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,
  #<Category id: 1, name: "foo">,
  #<Category id: 2, name: "bar">,
  #<Category id: 3, name: "baz">
)
# End auto-generated file.

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 rake seeding


    【解决方案1】:

    遇到完全相同的问题,未引用注释输出和日期时间列。看来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
    

    【讨论】:

    • 出色的解决方案,谢谢!似乎是一个相当普遍的问题,令人惊讶的是这个问答没有得到更多的支持!
    【解决方案2】:

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

    当我仔细阅读他们的源代码时,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 时,不引用日期时间列。所以我所做的是:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多