Использование class_name в собственном генераторе Rails - PullRequest
1 голос
/ 18 марта 2019

У меня есть базовый пользовательский генератор, который выглядит так, который наследуется от Rails :: Generators :: NamedBase в приложении Rails 5.1

class NotificationGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)

  def notification
    copy_file "notification.rb", "app/notifications/#{file_name}.rb"
    copy_file "notification_spec.rb", "spec/notifications/#{file_name}_spec.rb"
  end
end

Мой файл шаблона называется Notification.rb.tt, который находится в каталоге ../templates.

Шаблон выглядит так:

class <%= class_name %> < Notification

  def to_mail
  end

  def to_sms
  end
end

Однако, когда я запускаю генератор, созданные файлы имеют <% = имя_класса%> в файле, а не результат вызова этого метода. Как мне заставить генератор на самом деле визуализировать как шаблон erb?

1 Ответ

0 голосов
/ 19 марта 2019

После рытья некоторых коммитов ядра Rails я обнаружил эту проблему , в которой немного обсуждается расширение файла.

Кажется, что в rails 5.2 все шаблоны были переименованы в .tt (что означаетчто приведенный выше код может сработать, если я обновлюсь, я не углубился в ядро ​​rails).

Однако в качестве исправления для моего личного использования в 5.1 последний комментарий rafaelfranca представляет решение.Если я использую «шаблон», а не copy_file, он правильно анализирует и выводит.

Рабочий генератор выглядит так:

class NotificationGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)

  def notification
    template "notification.rb", "app/notifications/#{file_name}.rb"
    template "notification_spec.rb", "spec/notifications/#{file_name}_spec.rb"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...