ruby-on-rails - rails : hook_for :orm not finding active_record

标签 ruby-on-rails activerecord orm generator

我正在编写一个自定义生成器。在大多数情况下,生成器能够成功地使用钩子(Hook)。例如,

hook_for :resource_route, in: :rails, required: true

按预期调用resource_route。但是:

hook_for :orm, in: :rails, required: true

返回错误:

error  active_record [not found]

我假设这是因为 active_record_generator 位于与其他生成器(例如 resource_route 生成器)截然不同的目录中。

rails / activerecord / lib / rails / generators / active_record.rb

rails / railties / lib / rails / generators / rails / resource_route / resource_route_generator.rb

有没有办法让我的生成器正确 Hook 事件记录?

最佳答案

只有在我使用 hook_forremove_hook_for 进行了一项狡猾的工作之后,我才最终破解了这个问题。我的建议是不要管它,因为不值得这么麻烦。

这种方式使用更少的代码,为您的工作带来更多成果。

您可能需要使用一些技巧。

  1. 留在 Rails::Generators 命名空间内。

    我使用的文件夹结构是:

    lib/generators/my_own_model/
                               templates/
                               my_own_model_generator.rb
    
  2. 在模型中为要创建的生成器设置配置

    这就是克服错误(无论[未找到])令人头疼的问题所需的全部内容。

    代码如下所示

    require 'rails/generators/active_record/model/model_generator'
    
    module Rails
      module Generators
    
        hide_namespace 'my_own_model'
    
        class Railtie < ::Rails::Engine
          if config.respond_to?(:app_generators)
            config.app_generators.orm = :my_own_model
          else
            config.generators.orm = :my_own_model
          end
        end
    
        class MyOwnModelGenerator < ActiveRecord::Generators::ModelGenerator
          source_root "#{base_root}/active_record/model/templates" 
    
             # all public methods will get executed by rails g  
    
             protected
    
             # these won't but can be overwritten by sub classes
    
             private
    
             # these are still exposed to your templates nifty
        end
      end
    end
    
  3. 第三个技巧是隐藏您的生成器名称。你为什么这么问?那么您可能想知道您将不再需要它。

    $ rails g model MyNewModel generator:belongs_to my_own:boolean 
    

您刚刚创建了一个默认生成器,您可以从模板文件夹中再次覆盖它。 =)

nJoy!

关于ruby-on-rails - rails : hook_for :orm not finding active_record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367261/

相关文章:

ruby-on-rails - Ruby/Rails 同步作业管理器

ruby-on-rails - HABTM 2 表 2 种不同的关系

ruby-on-rails - ActiveRecord 通过 HABTM 引用查找记录

mysql - ActiveRecord raw sql 比 MySql 慢

python - django ORM 中的自定义 SQL : Filtering a list based off another filtered list in one query

php - Laravel Eloquent 版本的 "NOT IN"SQL

ruby-on-rails - Rails 4 – 如何从 NoMethodError 中解救并继续尝试方法?

ruby-on-rails - 请求 Rails 应用程序显着增加内存

ruby-on-rails - 无法使用 ssh 隧道和 activerecord 连接到远程数据库

ruby-on-rails - has_many 关系的动态类名