Generatoren und Migrationen in Plugins (Rails 3)

8

Ich versuche einfach, einen Plugin-Migrationsgenerator ohne Parameter zu erstellen, wie zum Beispiel: $rails generate yaffle und dies sollte die Migrationsdatei (lib / generators / yaffle / template / create_yaffle.rb) nach db / migrate / [timestamp] kopieren. _create_yaffle.rb.

  1. Das Problem, vor dem ich hier stehe, ist das Kopieren, aber ohne Zeitstempel.
  2. Wenn ich $rails generate yaffle ausführe, bekomme ich eine Nachricht, dass keine Argumente angegeben werden. Es wird erwartet, dass das Format rails generate yaffle NAME [options] lautet. Ich möchte keine Optionen / Argumente haben, es sollte nur rails generate yaffle sein.

Was soll ich tun?

Ich folgte dem Generator, der in acts_as_commentable verwendet wurde sieht ziemlich einfach aus, aber ich weiß nicht, wo ich diese Einstellungen ändern soll ... kann jemand helfen?

Generatorcode:

%Vor%     
Madhusudhan 10.11.2010, 06:14
quelle

3 Antworten

21

Ok, ich habe die Antwort gefunden ...

  1. Ich habe Rails::Generators::NamedBase anstelle von Rails::Generators::Base in meiner Generatordatei verwendet! Wenn Sie NamedBase verwenden, erwartet es immer, dass ein Argument übergeben wird (der Name des Initialisierers)

    Erläuterung: guides.rubyonrails.org/generators

  2. Und ich habe template method anstelle von migration_template verwendet, da die Migrationsdateien keine Migrationsnummer erzeugen

    Erklärung: Rails :: Generatoren :: Migration.migration_template

Letztendlich hat das funktioniert!

%Vor%     
Madhusudhan 10.11.2010, 21:40
quelle
2

Ein kleiner Schliff zur Lösung - damit Sie sich nicht den Zeitstempel für die Migration und die Zukunftssicherheit Ihres Generators zulegen müssen, falls das Kernteam von Rails entscheidet, eine andere Form des Stempelns (zB SHA-Hashes auf 10 Zeichen) zu wählen kann require 'rails/generators/active_record' und extend ActiveRecord::Generators::Migration wie folgt aussehen:

%Vor%

UPDATE In Rails 4 ActiveRecord::Generators::Migration ist kein Modul mehr, also benutze stattdessen:

%Vor%     
Sava Chankov 14.06.2013 16:49
quelle
1

Sie können einfach von ActiveRecord::Generators::Base erben und alles wird funktionieren

    
montrealmike 22.05.2013 15:00
quelle