【发布时间】:2011-06-29 03:29:28
【问题描述】:
我的数据库 (sqlite) 中有一个名为 books 的表,该表在创建表时由 rails 3 自动赋予一个 id 列。该表还有一个名为“isbn”的列,它显然是一个整数。
现在我想将表的主键更改为 isbn 列,然后删除原始 id 列。
这可以通过 Rails 迁移来完成吗?怎么样?
【问题讨论】:
标签: ruby-on-rails sqlite ruby-on-rails-3
我的数据库 (sqlite) 中有一个名为 books 的表,该表在创建表时由 rails 3 自动赋予一个 id 列。该表还有一个名为“isbn”的列,它显然是一个整数。
现在我想将表的主键更改为 isbn 列,然后删除原始 id 列。
这可以通过 Rails 迁移来完成吗?怎么样?
【问题讨论】:
标签: ruby-on-rails sqlite ruby-on-rails-3
当然可以,但不要这样做。
如果你想使用 isbn 来查询,而是像这样更新你的模型
class Book < ActiveRecord::Base
def to_param
self.isbn
end
end
和你的控制器
class BooksController
def show
@book = Book.find_by_isbn(params[:id])
end
# and similar for other actions
end
【讨论】:
ISBN 不是整数——例如,它可以有前导零。 ISBN 应该是一种文本类型——您不希望在那里进行任何类型的“智能”数字调整/强制。
我认为,最好保留原样并在 ISBN 上放置一个唯一索引。事后更改 SQLite 表结构可能会很尴尬。我不知道 Rails 的实现。
【讨论】: