Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Redmine插件开发-如何避免插件之间的表名和模型名重复_Ruby On Rails_Ruby On Rails 4_Redmine_Redmine Plugins - Fatal编程技术网

Ruby on rails 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

我正在为Redmine创建一个插件。但在迁移时,
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