插件中的生成器和迁移(rails 3)

Mad*_*han 9 ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3

我只是尝试创建一个没有任何参数的插件迁移生成器,例如:$rails generate yaffle这应该将迁移文件(lib/generators/yaffle/template/create_yaffle.rb)复制到db/migrate/[timestamp] _create_yaffle.rb.

  1. 我在这里遇到的问题是,它的复制,但没有时间戳.
  2. 此外,当我运行$rails generate yaffle它时,给我一条消息,表明没有提供参数,它希望采用这种格式rails generate yaffle NAME [options].我不想要任何选项/参数,它应该只是rails generate yaffle.

我该怎么办?

我跟着acts_as_commentable中使用的生成器,它看起来很简单,但我不知道在哪里修改这些设置......有人可以帮忙吗?

发电机代码:

require 'rails/generators'
require 'rails/generators/migration'

class ThumbitGenerator  Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)

  def self.next_migration_number(path)
    Time.now.utc.strftime("%Y%m%d%H%M%S")
  end

  def create_model_file
    template "like.rb", "app/models/like.rb"
    template "liking.rb", "app/models/liking.rb"
    template "create_likes.rb", "db/migrate/create_likes.rb"
    template "create_likings.rb", "db/migrate/create_likings.rb"
  end

end
Run Code Online (Sandbox Code Playgroud)

Mad*_*han 22

好的,我找到了答案......

  1. 我正在使用Rails::Generators::NamedBase而不是Rails::Generators::Base在我的生成器文件中!当你使用NamedBase时,它总是希望传递一个参数(这是初始化程序的名称)

    说明:guides.rubyonrails.org/generators

  2. 我正在使用template方法而不是migration_template因为迁移文件不会产生任何迁移号

    说明:Rails :: Generators :: Migration.migration_template

最后,这个工作!

require 'rails/generators'
require 'rails/generators/migration'

class ThumbitGenerator < Rails::Generators::Base
  include Rails::Generators::Migration
  source_root File.expand_path('../templates', __FILE__)

  def self.next_migration_number(path)
    Time.now.utc.strftime("%Y%m%d%H%M%S")
  end

  def create_model_file
    template "like.rb", "app/models/like.rb"
    template "liking.rb", "app/models/liking.rb"
    migration_template "create_likes.rb", "db/migrate/create_likes.rb"
    migration_template "create_likings.rb", "db/migrate/create_likings.rb"
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 你可以`require'railway/generators/active_record'`然后使用`ActiveRecord :: Generators :: Base.next_migration_number(path)`for next_migration_number (4认同)
  • @Mike Farmer:将'%6N`附加到strftime格式字符串以获得微秒,你应该好好去.像这样:https://gist.github.com/1110373 (2认同)