Ruby on rails Redmine插件开发-如何避免插件之间的表名和模型名重复
我正在为Redmine创建一个插件。但在迁移时,Ruby on rails Redmine插件开发-如何避免插件之间的表名和模型名重复,ruby-on-rails,ruby-on-rails-4,redmine,redmine-plugins,Ruby On Rails,Ruby On Rails 4,Redmine,Redmine Plugins,我正在为Redmine创建一个插件。但在迁移时,createtable似乎使用模型名作为表名。如果我已经有了另一个具有相同表名的插件呢 我可以做些什么来自动向表名添加前缀而不更改de模型名吗 我遇到的问题是卡罗的型号 是否可以使用rake脚本指示它创建如下表:create\u table pluginName\u modelName 我是如何创建插件框架的: bundle exec ruby bin/rails generate redmine_plugin carros creat
createtable
似乎使用模型名作为表名。如果我已经有了另一个具有相同表名的插件呢
我可以做些什么来自动向表名添加前缀而不更改de模型名吗
我遇到的问题是卡罗的型号
是否可以使用rake脚本指示它创建如下表:create\u table pluginName\u modelName
我是如何创建插件框架的:
bundle exec ruby bin/rails generate redmine_plugin carros
create plugins/carros/app
create plugins/carros/app/controllers
create plugins/carros/app/helpers
create plugins/carros/app/models
create plugins/carros/app/views
create plugins/carros/db/migrate
create plugins/carros/lib/tasks
create plugins/carros/assets/images
create plugins/carros/assets/javascripts
create plugins/carros/assets/stylesheets
create plugins/carros/config/locales
create plugins/carros/test
create plugins/carros/test/fixtures
create plugins/carros/test/unit
create plugins/carros/test/functional
create plugins/carros/test/integration
create plugins/carros/README.rdoc
create plugins/carros/init.rb
create plugins/carros/config/routes.rb
create plugins/carros/config/locales/en.yml
create plugins/carros/test/test_helper.rb
我遇到的模型表名重复问题:
bundle exec ruby bin/rails generate redmine_plugin_model carros Carro modelo:string ano:integer cor:string km:integer
create plugins/carros/app/models/carro.rb
create plugins/carros/test/unit/carro_test.rb
create plugins/carros/db/migrate/001_create_carros.rb
module Transporte
class Carro < ActiveRecord::Base
# https://github.com/rails/rails/blob/master/activerecord/test/models/developer.rb
self.table_name = "trans_carros"
end
end
迁移是:
cat plugins/carros/db/migrate/001_create_carros.rb
class CreateCarros < ActiveRecord::Migration
def change
create_table :carros do |t|
t.string :modelo
t.integer :ano
t.string :cor
t.integer :km
end
end
end
因此,我尝试在模型名称中添加一个模块:
module Tutorial
class Carro < ActiveRecord::Base
end
end
基本上,我改变了模型,将其包装在一个模块中: 这是我的新型号。它覆盖ActiveRecord中的属性以设置表名:
bundle exec ruby bin/rails generate redmine_plugin_model carros Carro modelo:string ano:integer cor:string km:integer
create plugins/carros/app/models/carro.rb
create plugins/carros/test/unit/carro_test.rb
create plugins/carros/db/migrate/001_create_carros.rb
module Transporte
class Carro < ActiveRecord::Base
# https://github.com/rails/rails/blob/master/activerecord/test/models/developer.rb
self.table_name = "trans_carros"
end
end
假设我在没有将模型包装到模块中的情况下更改了表名。查询数据库时,我出现了错误行为:
$ rails c
irb> Carro.all
上面从carros表中选择记录,从第一个安装了名为Carro
的模型的插件中选择
但是,我有一个避免冲突的模块:
$ rails c
irb> Transporte::Carro.all
现在它按照预期工作,使用正确的模型并查询相关表
$ rails c
irb> Carro.all
$ rails c
irb> Transporte::Carro.all