Tag: 轨道迁移

连接表的最佳SQL索引

考虑到性能改进,我想知道是否和哪些索引对联接表(特别是在Rails 3 has_and_belongs_to_many上下文中使用)有帮助。 模型和表格设置 我的模型是Foo和Bar和每个轨道约定,我有一个连接表叫bars_foos 。 没有主键或时间戳使这个表中的旧字段bar_id:integer和foo_id:integer 。 我很想知道下列哪个索引是最好的,没有重复: 复合索引: add_index :bars_foos, [:bar_id, :foo_id] 两个索引 A. add_index :bars_foos, :bar_id B. add_index :bars_foos, :foo_id 1和2-B的组合 基本上,我不确定复合指标是否足够,假设它是有用的开始。 我相信一个复合索引可以作为第一个项目的单一索引,这就是为什么我非常肯定,使用所有三行肯定会导致不必要的重复。 可能的用法 最常见的用法将被赋予一个Foo模型的实例,我将使用foo.bars的RoR语法来请求其相关的bars ,反之亦然, bar.foos用于模型Bar一个实例。 这些将生成types的查询SELECT * FROM bars_foos WHERE foo_id = ? 和SELECT * FROM bars_foos WHERE bar_id = ? 然后使用这些结果ID来SELECT * FROM bars WHERE ID in (?)和SELECT * […]

在导轨迁移中,你怎样去除一个字段的限制

以下是否正确? change_column :tablename, :fieldname, :limit => null

在Rails 3中删除表格和删除模型的最佳方法是什么?

我有一个模型和桌子,我不再需要在我的应用程序,我可以离开他们在那里,但我想删除他们保持干净整洁。 我试图找出最好的方法来消除他们与我的migrations & db / schema.rb文件和任何副作用可能有我的生产环境,我的应用程序在Heroku上。 我在我的本地机器和heroku上使用PostgreSQL。 到目前为止,我已经find了两种方法来做到这一点,但不知道哪个是最好的方法/轨道方式? 方法1 我想到了进入我的数据库,放下桌子,然后摧毁模型。 rails db DROP TABLE table_name \q rails destroy model model_name 如果我这样做,这个模型/表格的迁移会发生什么? 我对这个模型有两个迁移,一个是timestamp_create_modelname和一个add_attribute_to_table名字。 这个方法也会更新db / schema.rb文件吗? 当我将应用程序推到Heroku时,我怀疑模型会被移除,但是表格将保留在原位,是否有一个heroku命令来删除表格。 方法二 我读到的另一种方法是生成一个新的迁移,以删除表,然后摧毁模型。 rails generate migration drop_tablename 然后更新下面的文件: db / migrate / timestamp_drop_tablename (在下面Dan Wich的回答中更新) class DropTablename < ActiveRecord::Migration def up drop_table :tablename end def down create_table :tablename do |t| […]