Как использовать перегибы на рельсовом двигателе
Я создал движок с
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
то я получаю переход с особыми_моделями как имя таблицы и имя миграции
когда я запускаю ту же команду из myengine/test/dummy
bin/rails generate model singular_model
Я получаю результат spected: plural_model как имя таблицы и имя миграции
так, как я могу загрузить инфлектор в генератор рельсов?
Ответы
Ответ 1
Фактически вы можете создать файл с именем inflections.rb
в проекте _root/config/initializers/и написать свои правила в этом файле, например,
# 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
И он также применим к движку.
Надеюсь, что это поможет!
Ответ 2
В своем движке вы должны подумать о своей папке 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
.
В зависимости от того, какое поведение вам нужно, вы должны указать код своих пользовательских флексий.
Ответ 3
В Rails 4.2 двигатели rails не загружают инициализаторы при запуске генераторов, которые обсуждаются в этой проблеме: https://github.com/rails/rails/issues/14472 p >
Обход
-
Определите перегибы в my_engine/config/initializers/inflections.rb
:
# my_engine/config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'regatta', 'regattas'
end
-
Требовать инициализатор перетоков в engine.rb
:
# my_engine/lib/my_engine/engine.rb
require_relative '../../config/initializers/inflections'
module MyEngine
class Engine < ::Rails::Engine
# ...
end
end
-
Используйте генератор, как ожидалось: bin/rails g model Regatta