簡體   English   中英

Rails:hook_for :orm 沒有找到 active_record

[英]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_forremove_hook_for了一次狡猾的工作之后。 我的建議是不要管它,這不值得麻煩。

這種方式使用更少的代碼為您的工作帶來更多的結果。

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

  1. 留在 Rails::Generators 命名空間內。

    我使用的文件夾結構是:

     lib/generators/my_own_model/ templates/ my_own_model_generator.rb
  2. 在模型中為要創建的生成器設置配置

    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
  3. 第三個技巧是隱藏你的生成器名稱。 你為什么這么問? 好吧,您可能想知道您不再需要它了。

     $ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM