gpt4 book ai didi

ruby-on-rails - 将 rails 2 生成器转换为 rails 3?

转载 作者:行者123 更新时间:2023-12-04 20:22:34 25 4
gpt4 key购买 nike

将 rails 2 生成器转换为 rails 3 有多难?我一直在寻找有用的插件,但后来发现生成器仅适用于 rails 2。我意识到其中一些只是为了方便,但如果将生成器迁移到 rails 3 就像调整生成器代码中的几行一样简单,我会做这件事(并将工作提交给 github 以供将来的用户使用)。

例如,这是我一直在考虑使用的一个这样的生成器(来自 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

最佳答案

这真的取决于它是哪种发电机。 Rails 的许多内部结构在 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现在(以前是自动的),不再调用 migration_template在一个街区。

这个小小的转换花了我大约三个小时才能通过源头找到所有的片段。最好的部分是我根本不需要更改我的模板(我相信对于大多数生成器来说都是如此)。

尽管如此,我认为迁移生成可能是记录最少的, looking at the generator guide在 Rails3 中重新创建生成器似乎并不太具有挑战性。在我看来绝对值得一试。

此外,我知道该指南的一位作者即将出版一本书,其中一章都是关于生成器的——所以它肯定会受到更多关注。

关于ruby-on-rails - 将 rails 2 生成器转换为 rails 3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com