生成rails应用程序时,从rails模板内部访问应用程序名称

dan*_*gle 8 ruby templates ruby-on-rails

我正在搞乱rails 2.3模板,并希望能够在我的模板中使用应用程序名称作为变量,所以当我使用......时 ,我希望能够访问template.rb中的appname.有人知道怎么做吗? 谢谢
rails appname -m path/to/template.rb

Mik*_*her 15

我一直在寻找这个问题的答案.不幸的是,上面的答案(@root)似乎在Rails 3中不起作用.

这是您可以在Rails 3应用程序模板中访问的变量(甚至更容易):

@app_name
@app_path
Run Code Online (Sandbox Code Playgroud)


dan*_*gle 8

谢谢你的回答.迈克伍德豪斯,你是如此亲密.事实证明,你需要做的就是从rails模板中访问appname ...

@root.split('/').last  
Run Code Online (Sandbox Code Playgroud)

@root变量是初始化模板时创建的第一个变量,可在rails模板中使用.RAILS_ROOT不起作用.


Dan*_*hoe 6

在Rails 3中,使用该app_name属性.

请参阅Rails :: Generators :: AppGenerator的文档.


小智 5

我遇到了类似的问题,上面列出的变量都没有在Rails 4 @name中可用.我发现在运行时可用

rails plugin new engines/dummy -m my_template.rb
Run Code Online (Sandbox Code Playgroud)

模板中还有其他有用的变量.你可以自己看看并利用它来玩pry.在我的模板里面我添加了

require 'pry'; binding.pry
Run Code Online (Sandbox Code Playgroud)

然后运行ls以显示可用实例变量的列表

ls -i
instance variables:
    @_initializer            @app_path  @behavior   @destination_stack  @extra_entries  @name           @output_buffer   @shell
    @_invocations            @args      @builder    @dummy_path         @gem_filter     @options        @rails_template  @source_paths
    @after_bundle_callbacks  @author    @camelized  @email              @in_group       @original_name  @shebang
Run Code Online (Sandbox Code Playgroud)