5

रेल 2 जनरेटर को रेल 3 में परिवर्तित करना कितना मुश्किल है? मैं उपयोगी प्लगइन्स ढूंढ रहा हूं लेकिन फिर यह पता लगा रहा हूं कि जेनरेटर केवल रेल के लिए हैं 2. मुझे एहसास है कि इसमें से कुछ सिर्फ एक सुविधा है, लेकिन अगर जेनरेटर को रेल 3 में माइग्रेट करना सामान्य है तो जेनरेटर कोड में कुछ लाइनों को ट्वीव करना उतना आसान होगा, मैं चाहता हूं बस ऐसा करने के लिए नीचे रहें (और भविष्य के उपयोगकर्ताओं के लिए भी जिथब को काम करें)।रेल 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

मेरे पास एक ही प्रश्न है। मैं जादूगर का उपयोग करना चाहता हूं, लेकिन मूल स्रोत केवल रेल 2 अनुरूप है। तब मैंने किसी ऐसे व्यक्ति को पाया जिसने रेल 3 शाखा बनाई है (https://github.com/jfelchner/wizardly), लेकिन जनरेटर अभी भी रेल 2 कोड में है। –

+0

वे काफी अलग हैं ... प्रतिक्रिया के लिए रेल-3 कांटा मौजूद है, वैसे: https://github.com/alkesh/feedback – Roman

उत्तर

4

यह वास्तव में जनरेटर की तरह यह है पर निर्भर करता है। रेल के बहुत से आंतरिक 2 और 3 के बीच बहुत बदल गए हैं। मुझे आपको एक बहुत ही सरल माइग्रेशन जनरेटर को बदलने में मेरा हालिया अनुभव दिखाता है, जो कि मेरे एक ऐप में 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 कॉल करने के लिए किया था (स्वचालित होने के लिए प्रयोग किया जाता है), और अबपर कॉल नहीं कर रहा है एक ब्लॉक में।

इस छोटे रूपांतरण ने मुझे स्रोत के माध्यम से सभी टुकड़ों का शिकार करने के लिए लगभग तीन घंटे लग गए। सबसे अच्छा हिस्सा यह था कि मुझे अपना टेम्पलेट बिल्कुल बदलना नहीं था (और मुझे विश्वास है कि अधिकांश जेनरेटर के लिए यह सच होगा)।

यह सब कहा जा रहा है, मुझे लगता है कि माइग्रेशन पीढ़ी शायद कम से कम अच्छी तरह से प्रलेखित है, looking at the generator guide यह वास्तव में Rails3 में जेनरेटर को फिर से बनाने के लिए बहुत चुनौतीपूर्ण प्रतीत नहीं होता है। निश्चित रूप से मेरी राय में एक दरार लेने लायक है।

इसके अलावा, मुझे पता है कि उस मार्गदर्शिका के लेखकों में से एक के पास जनरेटर के बारे में एक अध्याय के साथ जल्द ही एक पुस्तक आ रही है - इसलिए यह निश्चित रूप से कुछ है जो अधिक ध्यान दे रहा है।

+0

धन्यवाद। मैंने विषय पर थोड़ा अधिक शोध किया, अन्य रेल 3 जनरेटर को देखकर, और मुझे जो कुछ चाहिए, उसे मिला। एकमात्र चीज जिसे मैं समझ नहीं पाया था रेलवे 3 जनरेटर में एक चर को एक चरम पर कैसे पास किया जाए, जिसे रेल 2 जनरेटर में 'असाइन' हैश मान के साथ आसानी से किया गया था। –

संबंधित मुद्दे