我一直在阅读很多关于这个主题的内容,似乎没有什么能够满足我的需求.如果我重复或不清楚我对ruby和rails都是新手以及对stackoverflow的新手,我很抱歉.
我有一个现有的rails应用程序,里面有很多基础设施.我想采用它的一些模型,将它们嵌套在命名空间中,并将所有这些放入ruby gem中,以便在其他rails应用程序中使用.根据我的理解,rails的加载路径存在问题,因为它们是惯例,而定义另一个引擎的问题是因为你有两个并且它们会崩溃.
我一直在寻找指导或教程,以便在没有太多运气的情况下学习如何做到这一点,但我很肯定,如果有人可以指出我会很棒的话,那里会有一些东西.
我尝试使用引擎制作宝石会因碰撞或缺少导轨而失败.
我正在运行rails 3.2.3和ruby 1.9.3.
我有一个rails应用程序使用rake db:seed我的数据库中的一些基础知识来开始工作.这通过一些基础设施和fixtures.rb工作,其他人写道将YAML加载到数据库中.
我正在尝试做的是采用这个基础设施并将其移动到我自己的宝石中,以便我可以在其他地方再次使用它,这需要我将一些我自己的宝石模型插入宝石的种子任务(我想要的)从db:seed主应用程序中的调用或类似的东西运行)并且主应用程序使用它自己的种子推送一些gem的模型.这个的第二部分我已经工作了,这是我给出的fixtures.rb文件中的一个简单修复.我现在要做的事情:
[MyGem::Engine.root, 'lib', ...].join从那时调用一个方法的文件,其中有一个路径将YAML文件加载到数据库中,我不明白为什么它不应该工作.rake db:seed运行我的宝石中定义的任务.我已经在我的gem(它是引擎)的lib/tasks下添加了.rake文件,但我似乎无法从主应用程序rakefile中调用它们.rake db:seed在主应用程序中运行时宝石将运行额外的播种,而主应用程序开发人员甚至不必了解它们.我想要避免的脏解决方案是从主应用程序内的gem中加载.rake文件,或者从主应用程序中的gem中加载seeds.rb.
所以我要问的是基本上如何通过rake db:seed在gemfile中使用gem 来使任务在我的gemified引擎中定义?
我想以类似于生成器的方式调用另一个迁移.基本上,如果您有一个创建表,那么在将来的某个时间点,您将不再使用该表,并且您希望迁移进行调用,up并且down与原始创建迁移的迁移完全相反.如果有可能那么我会创建一个类似的生成器
rails g reverse_migration CreateModel
Run Code Online (Sandbox Code Playgroud)
然后结果是这样的
class ReverseCreateModel < ActiveRecord::Migration
def up
#call to create model down
end
def down
#call to create model up
end
end
Run Code Online (Sandbox Code Playgroud)
我不想要任何解决方法,而是明确地重复代码并保持干净迁移和角色的能力.
任何帮助将不胜感激!