我想制作一个生成器,根据应用程序中已有的文件(例如, View 或 Controller )创建文件(和目录等)。所以如果我们有这样设置的 View
-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
所以这基本上就是我想用生成器做的事情,这样我就可以将我的代码整合到一个插件中并将其用于其他应用程序。
第一个问题,我如何生成任意文件(使用生成器使用基于现有文件名的文件名。像我上面那样循环遍历目录是否合适,获取目录/文件并生成文件?有没有一种方法可以使用更简单的方法来完成我所做的事情(我的方法似乎很容易损坏)。
此外,我是否应该将所有读取/格式化/写入代码放入生成器本身,然后将一个字符串传递到"initialize content"
中?节create_file
或者我应该把它放在别的地方。或者我应该使用生成器创建裸文件并用初始化脚本填充它?
是否有更多 rails 类型的填充生成文件的方法,或者我应该将所有格式化代码都插入生成器中。如果是这样,处理这个问题的合适方法是什么。
最佳答案
我不确定你是否想知道生成器是如何在 rails3 中构建的。您显示的代码不太像生成器。在生成器中,您可以使用 Thor 中的所有命令,它为您提供了一个非常强大的工具集,用于操作文件以及将代码(字符串)注入(inject)类或文件。
所以我肯定会在生成器中填充您的文件,因为这样它会根据用户请求发生,并且用户可以选择是否需要或可以覆盖某些文件。
在您的 gem 中,您将有一个 lib/generators
文件夹,其中包含一个 templates
文件夹,其中包含您可能想要放置在 Rails 应用程序中的所有文件。
来自 Thor 文档,这里是 a nice example在生成器中构造文件。
希望这对您有所帮助。
关于ruby-on-rails - rails 生成器 : generate files based on already existing rails files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222451/