0

我正在尝试制作简单的视图生成器并使用 DRY 原则,我不想拥有自己的 html (erb/haml/slim) 模板。我希望我的生成器连接到现有的模板引擎并传递一些参数。

我的view_generator.rb文件如下所示:

class ViewGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)
  argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"

def some_custom_method
  (...)
end

hook_for :template_engine, :as => :scaffold

end

一切都像这样正常工作。我想做的some_custom_method是添加几个属性:

def some_custom_method
  new_attribute = Rails::Generators::GeneratedAttribute.new("description")
  new_attribute.type = :integer
  attributes << new_attribute
end

发生的事情是我new_attributeattributes数组中插入,但是当hook_for执行时,attribute变量恢复为从命令行传递的原始变量。

我怎样才能绕过这个?

4

1 回答 1

1

some_custom_method调用点时,属性已经设置(通过ARGV)并且通过检查代码我看不到从那里改变它们的清晰方法。您可以通过覆盖start生成器中的类方法并直接操作 args 来使用另一种方法,如下所示:

class ViewGenerator < Rails::Generators::NamedBase
  # your code ...
  def self.start(args, config)
    args.insert(1, 'description:integer') # 0 being the view name
    super
  end
end
于 2012-12-15T20:16:58.750 回答