[英]Rails: hook_for :orm not finding active_record
我正在編寫一個自定義生成器。 在大多數情況下,生成器能夠成功使用鈎子。 例如,
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_for
和remove_hook_for
了一次狡猾的工作之后。 我的建議是不要管它,這不值得麻煩。
這種方式使用更少的代碼為您的工作帶來更多的結果。
您可能需要使用一些技巧。
留在 Rails::Generators 命名空間內。
我使用的文件夾結構是:
lib/generators/my_own_model/ templates/ my_own_model_generator.rb
在模型中為要創建的生成器設置配置
error whatever [not found]
令人頭疼的問題,這就是克服error whatever [not found]
所需的全部內容。
代碼看起來像這樣
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
第三個技巧是隱藏你的生成器名稱。 你為什么這么問? 好吧,您可能想知道您不再需要它了。
$ rails g model MyNewModel generator:belongs_to my_own:boolean
您剛剛創建了一個默認生成器,您可以從模板文件夾中再次覆蓋它。 =)
快樂!
至少在 Rails 5 中,你需要指定生成器的類型 (:model, :migration, :application_record)
hook_for :orm, as: :model
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.