2011-05-19 51 views
0

所以我试图从一个控制器 的想法是,我可以从一个Rails应用程序从控制器内运行的建筑工

用于测试目的IVE内产生支架内运行的发电机创建了一个小型发电机这会创建一个没有真实内容的初始化程序。我已经从shell中运行这个(铁轨产生初始化)

lib/generators/initializer_generator.rb 
    class InitializerGenerator < Rails::Generators::Base 
     def create_initializer_file 
     create_file "config/initializers/initializer.rb", "# Add initialization content here" 
     end 
    end 

但问题来了时,我尝试从控制器运行发电机

class GeneratorController < ApplicationController 
    include Rails::Generators 
    include Rails::Generators::Actions 

    def index 
    generate(:initializer) 
    end 

end 

所以这带来的反应“未定义方法'行为” 然后我做了一些研究,明知轨发生器基于APON雷神 ,发现行为的方法是在托尔雷神方法::操作模块 http://rubydoc.info/github/wycats/thor/master/Thor/Actions:behavior

因此,我改变的控制器编码为包括模块:

class GeneratorController < ApplicationController 
    include Rails::Generators 
    include Rails::Generators::Actions 
    include Thor::Actions 

    def index 
    generate(:initializer) 
    end 

end 

现在错误是“的参数错号(3 0)”。现在对于可能出现的问题感到非常困惑。

+0

使用反引号是解决这个 – Ben 2011-05-25 10:08:09

+0

使用反引号是解决这个问题的方法 – Ben 2011-05-25 10:08:10

回答

0

您是否尝试过直接调用该类?

InitializerGenerator.new.initializer 

这是Thor over Rake的一个优势,它们是普通的Ruby类。

我不得不把我的方法里面destination_root,例如:

def create_initializer_file 
    destination_root = Rails.root 
    create_file "config/initializers/initializer.rb", "# Add initialization content here" 
    end 

我使用发电机所以有可能是一个更好的办法才刚刚开始。

之后我遇到了一个问题,我还没有解决的是,如果文件已经存在,Thor会提示用户输入。