如何在rails引擎上使用变形

时间:2015-06-22 16:46:30

标签: ruby-on-rails ruby-on-rails-4

我用

创建了一个引擎
rails plugin new myengine --mountable

搜索'变形'在项目文件夹中,我找到了 /test/dummy/config/initializers/inflections.rb 档案

在这个文件中我把

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'singular_model', 'plural_model'
end

当我尝试使用模型生成器(来自项目根目录)

bin/rails generate model singular_model

然后我用 singular_models 作为表名和迁移名称进行迁移

当我从myengine / test / dummy

运行相同的命令时
bin/rails generate model singular_model

我得到了指定的结果: plural_model 作为表名和迁移名称

那么,如何将导流板加载到导轨发生器中?

3 个答案:

答案 0 :(得分:1)

您实际上可以在项目_root / config / initializers /中创建一个名为inflections.rb的文件,并在该文件中编写规则,例如,

# Be sure to restart your server when you modify this file.

# Add new inflection rules using the following format. Inflections
# are locale specific, and you may define rules for as many different
# locales as you wish. All of these examples are active by default:
ActiveSupport::Inflector.inflections(:en) do |inflect|
#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
#   inflect.irregular 'person', 'people'
#   inflect.uncountable %w( fish sheep )
    inflect.irregular 'cloth', 'clothes'
end

# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
#   inflect.acronym 'RESTful'
# end

它也适用于引擎。

希望它有所帮助!

答案 1 :(得分:0)

在您的引擎上,您必须将test/dummy/文件夹视为使用此引擎的应用的根目录。此文件夹仅用于测试目的,不是引擎的设置。

假设您的引擎位于文件夹myengine,而您的应用位于文件夹myapp

1)如果您想要一个自定义变形,它在引擎级别定义,并在引擎和应用程序级别使用。然后必须在:

中定义
# myengine/config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'singular_model', 'plural_model'
end

是的,您必须在其中创建文件夹initializers和文件inflections.rb。此变形对每个使用引擎的应用程序都有效。

2)如果您希望自定义变形仅适用于您的应用,但不适用于使用相同引擎的其他应用。您必须在您的myapp/config/initializers/inflections.rb使用相同的代码,默认情况下,此文件在Rails应用程序中确实存在。

在最后一种情况下,自定义变形的范围仅为当前应用,就像在test/dummy文件夹中一样。

根据您需要的行为,您必须放置自定义变形的代码。

答案 2 :(得分:0)

在Rails 4.2中,rails引擎在运行生成器时不会加载初始化程序,本期将讨论这个问题:https://github.com/rails/rails/issues/14472

解决方法

  1. my_engine/config/initializers/inflections.rb中定义变形:

    # my_engine/config/initializers/inflections.rb
    
    ActiveSupport::Inflector.inflections do |inflect|
      inflect.irregular 'regatta', 'regattas'
    end
    
  2. 需要engine.rb中的变形初始值设定项:

    # my_engine/lib/my_engine/engine.rb
    
    require_relative '../../config/initializers/inflections'
    
    module MyEngine
      class Engine < ::Rails::Engine
        # ...
      end
    end
    
  3. 按预期使用生成器:bin/rails g model Regatta