我的数据库(sqlite)中有一个名为books的表,在创建表时,rails 3会自动为id列提供id。该表还有一个名为“isbn”的列,显然是一个整数。
现在我想将表主键更改为isbn列,然后删除原始id列。
这可以通过rails迁移来完成吗?怎么样?
答案 0 :(得分:2)
ISBN不是整数 - 例如,它可以有前导零。 ISBN应该是文本类型 - 您不希望在那里进行任何类型的“智能”数字调整/强制。
我认为,将事情保留原样并在ISBN上放置一个独特的索引会更好。事后改变SQLite表结构可能很尴尬。我不知道Rails的实现。
答案 1 :(得分:2)
当然,但不要这样做。
如果您想使用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