【问题标题】:Sqlite3 in ruby on rails and cmdRuby on Rails 和 cmd 中的 Sqlite3
【发布时间】:2013-01-29 06:09:19
【问题描述】:

我有一个带有名称建筑物的表,我想删除它,因为我忘记了一个列。 在 cmd 中,我转到文件夹并键入“sqlite3”,然后键入“.tables”,没有任何显示。 为什么?我该怎么办?

【问题讨论】:

  • 您最初是通过迁移创建表的吗?
  • 是的,我里面有东西,但我不关心实体的

标签: ruby-on-rails database sqlite sqlite3-ruby


【解决方案1】:

删除数据库表的正确方法是为其编写迁移。

迁移是一种方便的方式,让您可以在一个 结构化和有组织的方式。您可以通过以下方式编辑 SQL 片段 手,但您将负责告诉其他开发人员 他们需要去运行它们。您还必须跟踪 下次需要对生产机器运行哪些更改 你部署。

Active Record 跟踪已运行的迁移,以便您 必须做的是更新您的源代码并运行 rake db:migrate。积极的 记录将确定应该运行哪些迁移。它还将 更新您的 db/schema.rb 文件以匹配您的数据库的结构。

来源:http://guides.rubyonrails.org/migrations.html

【讨论】:

  • 我把 "def down drop_table :buildings end" 然后我转到 cmd rake db:migrate 并且没有任何改变
【解决方案2】:

您应该避免直接操作数据库,而是使用迁移。如果您忘记添加列,那么您应该使用 add_column 创建一个新的迁移以将该列添加到表中。

或者,如果之前的迁移是创建缺少列的表的迁移,并且您尚未分发此迁移,但您可以执行rake db:rollback,编辑迁移并再次运行rake db:migrate

您在运行 sqlite 命令时缺少表很可能是因为您忘记指定要加载的 sqlite 文件:sqlite3 <db_name>

【讨论】:

  • 我不能做 db:rollback 因为不是之前的迁移。我尝试做 sqlite3 建筑物,但当我做 .tables 时没有任何改变
  • 如果不是先前的迁移,则编写另一个新的迁移以将列添加到表中。使用add_column
  • 你能举个例子吗? (在cmd中输入什么)
  • 请参见:guides.rubyonrails.org/migrations.html 您只需创建一个迁移:rails g migration <migration_name> 并在更改方法中添加add_column :<table_name>, :<column_name>, :<type>。这将创建一个迁移,将您缺少的列添加到表中。然后您可以使用rake db:migrate 运行它。无需删除整个表格,因为您缺少一列。
  • c:\Sites\projectproperties>rails g migration CreateBuildings location:string invoke active_record 另一个迁移已经命名为 create_buildings: c:/Sites/projectproperties/db/migrate/20120723200049_create_buildings.rb
猜你喜欢
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2018-06-08
  • 1970-01-01
相关资源
最近更新 更多