5

レール2の発電機をレール3に変換するのはどれくらい難しいですか?私は有用なプラグインを見つけ続けていますが、ジェネレータはレール2のみであることが分かりました。私はいくつかのことが便利だと思いますが、ジェネレータコードをレール3にマイグレーションすれば、ちょうどそれを行うためにダウンしてください(将来のユーザーのためにgithubに仕事をコミットする)。2つの発電機をレールに変換する3?

ここで私は(feedbackから)例えば、使用することについて

require File.expand_path(File.dirname(__FILE__) + "/lib/insert_routes.rb") 

class FeedbackFormGenerator < Rails::Generator::Base 

    attr_accessor :name, 
    :model_class_name, 
    :controller_class_name, 
    :helper_class_name, 
    :mailer_class_name 


    def initialize(runtime_args, runtime_options = {}) 
    super 
    @name = (runtime_args[0] || "feedback").downcase 
    @model_class_name = name.classify 
    @mailer_class_name = "#{@model_class_name}Mailer" 
    @controller_class_name = "#{@model_class_name.pluralize}Controller" 
    @helper_class_name = "#{@model_class_name.pluralize}Helper" 
    #@js_framework = (runtime_options['']) 

    end 

    def manifest 
    record do |m| 

     puts "hello" 
     add_model(m) 
     add_mailer(m) 
     add_controller(m) 
     add_helper(m) 
     add_views(m) 
     add_routes(m) 
     add_unit_test(m) 
     add_functional_test(m) 
     add_stylesheet(m) 
     add_javascript(m) 
     add_images(m) 
    end 
    end 


    def add_stylesheet(m) 
    m.directory 'public/stylesheets' 
    m.file 'feedback.css', 'public/stylesheets/feedback.css' 

    end 

    def add_javascript(m) 
    m.directory 'public/javascripts' 
    file_name = options[:jquery] ? 'jquery.feedback.js' : 'prototype.feedback.js' 
    m.file file_name, "public/javascripts/#{file_name}" 
    end 

    def add_images(m) 
    m.directory 'public/images/feedback' 
    m.file "images/feedback_tab.png", "public/images/feedback/feedback_tab.png" 
    m.file "images/feedback_tab_h.png", "public/images/feedback/feedback_tab_h.png" 
    m.file "images/closelabel.gif", "public/images/feedback/closelabel.gif" 
    m.file "images/loading.gif", "public/images/feedback/loading.gif" 
    end 

    def add_model(m) 
    m.template 'feedback_model.rb.erb', "app/models/#{name}.rb" 
    end 

    def add_mailer(m) 
    m.template 'feedback_mailer.rb.erb', "app/models/#{name}_mailer.rb" 
    m.directory "app/views/#{name}_mailer" 
    m.file 'views/feedback_mailer/feedback.html.erb', "app/views/#{name}_mailer/feedback.html.erb" 

    end 

    def add_controller(m) 
    m.template 'feedbacks_controller.rb.erb', "app/controllers/#{name.pluralize}_controller.rb" 
    end 

    def add_helper(m) 
    template_name = options[:jquery] ? 'feedbacks_helper.rb.jquery.erb' : 'feedbacks_helper.rb.prototype.erb' 
    m.template template_name, "app/helpers/#{name.pluralize}_helper.rb" 
    end 

    def add_views(m) 
    m.directory "app/views/#{name.pluralize}" 
    m.file 'views/feedbacks/new.html.erb', "app/views/#{name.pluralize}/new.html.erb" 
    end 

    def add_routes(m) 
    m.route_name "new_feedback", "feedbacks/new", {:controller => name.pluralize, :action => "new"} 
    m.route_name "feedback", "feedbacks", {:controller => name.pluralize, :action => "create"} 
    end 

    def add_unit_test(m) 
    m.template 'feedback_test.rb.erb', "test/unit/#{name}_test.rb" 
    m.template 'feedback_mailer_test.rb.erb', "test/unit/#{name}_mailer_test.rb" 
    end 

    def add_functional_test(m) 
    m.template 'feedbacks_controller_test.rb.erb', "test/functional/#{name.pluralize}_controller_test.rb"  
    end 

    protected 

    def add_options!(opt) 
    opt.separator '' 
    opt.separator 'Options:' 
    opt.on("--jquery", 
     "Use jquery Javascript framework, default is Prototyp")   { |v| options[:jquery] = true } 
    end 
end 
+0

私は同じ質問があります。私はウィザードを使いたいですが、元のソースはRails 2にしか対応していません。私はその後、Rails 3ブランチ(https://github.com/jfelchner/wizardly)を作った人を見つけましたが、ジェネレータはまだRails 2のコードです。 –

+0

これはかなり異なっています...フィードバックにはRails-3フォークがあります。ところで:https://github.com/alkesh/feedback – Roman

答えて

4

を考えてきたそのような発電機は、それは実際にそれがある発電機の一種に依存します。 Railsの内部構造の多くは2から3の間で大きく変わってきました。私のアプリケーションのうちの1つにある非常に単純なマイグレーションジェネレータを2から3に変換した最近の経験を教えてください。

ここは2ですコード:

class LegacyMigrationGenerator < MigrationGenerator 
    def manifest 
    record do |m| 
     m.migration_template 'legacy_migration.rb', 'db/migrate' 
    end 
    end 
end 

そしてここでは、3コードです:

require 'rails/generators/active_record' 

class LegacyMigrationGenerator < ActiveRecord::Generators::Base 
    source_root File.expand_path('../templates', __FILE__) 
    def create_migration_file 
    migration_template "legacy_migration.rb", "db/migrate/#{file_name}.rb" 
    end 
end 

だから、あなたが見ることができるように - オーバーライドする全く別の方法を、今発電機から継承しなければならなかったが、(今、このsource_rootを呼び出す必要がありました以前は自動であった)、そしてもはやブロック内の。

この小さな変換では、すべての部分をソースから探し出すのに約3時間かかりました。最も重要な部分は、テンプレートをまったく変更する必要がないことでした(そして、私はそれがほとんどのジェネレータに当てはまると信じています)。

私は、マイグレーションの世代はおそらく最もよく文書化されていないと考えています。looking at the generator guide Rails3でジェネレータを再作成するのは難しいようです。私の意見では間違いなく亀裂を取る価値がある。

また、私はこのガイドの著者の一人がすぐにジェネレーターについての章ですぐに出てくる本を持っていることを知っています - それは間違いなくもっと注目を集めるものです。

+0

ありがとう。このトピックについてもう少し調べて、他のRails 3ジェネレータを見て、必要なもののほぼすべてを見つけました。私が理解できなかった唯一のことは、Rails 3ジェネレータでテンプレートに変数を渡す方法でした。これは、Rails 2ジェネレータで ':assigns'ハッシュ値を使って簡単にできました。 –

関連する問題