【问题标题】:Rails Generator: generate files based on already existing rails filesRails Generator:基于已有的 Rails 文件生成文件
【发布时间】:2011-09-07 12:35:08
【问题描述】:

我想制作一个生成器,它可以根据应用程序中现有的文件(例如,视图或控制器)创建文件(和目录等)。所以如果我们有这样的视图设置

-app
   -views 
        - layouts
             - application.html.erb
        - users
             - index.html.erb
             - show.html.erb 
             - etc ...

我想基于它们创建我可以做的文件(仅使用 ruby​​)

directories = Dir.entries("#{Rails.root}/app/views")
directories.each do |directory|
  unless directory == "." or directory == ".."
    files = Dir.entries("#{Rails.root}/app/views/#{directory}")
    files.each do |file|
      unless file == "." or file == ".."
        text = File.read("#{Rails.root}/app/views/#{directory}/#{file}")      
        something #=> whatever else needs to go here to edit the file
        something else #=> output_file.puts whatever
      end
    end
  end
end

所以这基本上就是我想用生成器做的事情,这样我就可以将我的代码滚动到插件中并将其用于其他应用程序。

第一个问题,如何生成任意文件(文件名基于使用生成器的现有文件名。像我上面那样循环浏览目录是否合适,获取目录/文件并生成文件?有没有办法使用更简单的方法来做我所做的事情(我的似乎很容易破坏)。

另外,我是否应该将所有读取/格式化/写入代码 放入生成器本身 并将字符串传递到 create_file"initialize content" 部分或我应该把它放在别的地方吗?或者我应该使用生成器创建裸文件并使用初始化脚本填充它?

是否有更多的 rails 类型的填充生成文件的方式,或者我应该将所有格式化代码推入生成器中。如果是这样,解决此问题的适当方法是什么。

【问题讨论】:

  • 您的问题非常突然地结束了“如果是这样,那是什么”。你还有什么要补充的吗?

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-plugins


【解决方案1】:

我不确定你是否想知道生成器是如何在 rails3 中构建的。您显示的代码不是很像生成器。在生成器中,您可以使用来自Thor 的所有命令,它为您提供了一个非常强大的文件处理工具集,并将代码(字符串)注入到类或文件中。

所以我肯定会在生成器中填充您的文件,因为它会根据用户请求发生,并且用户可以选择是否需要或可以覆盖某些文件。

在您的 gem 中,您将有一个 lib/generators 文件夹,其中包含一个 templates 文件夹,其中包含您可能想要放置在 rails 应用程序中的所有文件。

来自 Thor 文档,这里是 a nice example 在生成器中构造文件。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    有一个简单的 API 可以在 Rails 中使用生成器。在这里你可以找到一个很好的指南:

    http://guides.rubyonrails.org/generators.html

    如果你想检查一些代码:

    https://github.com/coderloop/tamed_beast(我是它的生成器的作者)

    https://github.com/pilu/web-app-theme(另一个干净的例子)

    【讨论】:

    • 不是我对你的答案投了反对票,但我建议它被否决了,因为它是指向其他网站的 3 个链接,没有自己的真实内容。由于外部链接有时具有短暂性,因此这个答案最终可能只是一组死链接。
    • @Steve:谢谢你的解释。盲目粘贴链接不是我的习惯。在这种情况下,考虑到解决方案不是那么 容易 适合完整的答案,我粘贴了一个完整的指南,其中包含一些真实(且简单)的示例,以展示如何使用 rails 生成器。我是 tamed_beast 的生成器的作者,所以如果需要我可以提供更多帮助。
    • 我同意史蒂夫的观点,这可能只是发布链接,但我已经阅读了它们,它们有点帮助,但我真的在寻找解释,而不仅仅是代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多