Принудительное переопределение файла с template () в генераторе Rails? - PullRequest
3 голосов
/ 04 октября 2011

У меня есть генератор, который, как часть набора других операций, должен настроить класс модели с кучей миксинов, значений по умолчанию, комментариев и т. Д.

Я хочу использоватьтот же код rails g model ... (я звоню invoke из моего генератора), но проблема в том, что существует конфликт, потому что мой шаблон и шаблон генератора моделей пытаются разделить друг друга:

<code>
$ be rails g entry_form karaoke events full_name:string group_name:string
      create  app/controllers/karaokes_controller.rb
      create  app/views/karaokes/show.html.erb
      create  app/views/karaokes/thanks.html.erb
       route  resource :karaoke
      create  app/models/karaoke_entry.rb
      invoke  active_record
      create    db/migrate/20111004004008_create_karaoke_entries.rb
    conflict    app/models/karaoke_entry.rb
  Overwrite app/models/karaoke_entry.rb?
  (enter "h" for help) [Ynaqdh]

Какие-нибудь рекомендации, как обойти это?

(Лучшее, что я придумал, это, возможно, переместить создание файла моей модели вниз, и найти какой-то способ заставитьtemplate / copy_file чтобы перезаписать файл, не беспокоя пользователя, но я не вижу никакого ранее существующего способа сделать это.)

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Некоторый групповой мозговой штурм нашел способ обойти эту проблему.

Вы не можете переопределить (насколько я могу судить), но вы можете сказать генератору модели пропустить уже существующие файлы.,Это работает:


# Create the model definition from a template:
template "model.rb", "app/models/#{model}.rb"

# ... Later, get Rails to create everything else:
Rails::Generators.invoke("model", ["Example", "title:string", "--skip"])

(я все равно приветствовал бы способ разрешить template переопределять файлы.)

2 голосов
/ 26 марта 2015

Добавить force: true или skip: true к вызову шаблона:

template "model.rb", "app/models/#{model}.rb", force: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...