【问题标题】:sqlite & rails: Change primary key column?sqlite & rails:更改主键列?
【发布时间】:2011-06-29 03:29:28
【问题描述】:

我的数据库 (sqlite) 中有一个名为 books 的表,该表在创建表时由 rails 3 自动赋予一个 id 列。该表还有一个名为“isbn”的列,它显然是一个整数。

现在我想将表的主键更改为 isbn 列,然后删除原始 id 列。

这可以通过 Rails 迁移来完成吗?怎么样?

【问题讨论】:

    标签: ruby-on-rails sqlite ruby-on-rails-3


    【解决方案1】:

    当然可以,但不要这样做。

    如果你想使用 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
    

    【讨论】:

    • 这是否意味着我可以通过执行以下操作来显示个别书籍:GET /books/[isbn] 而不是 /books/[id] ??
    • 你知道我自己试过了,结果确实可以。谢谢亨里克!
    【解决方案2】:

    ISBN 不是整数——例如,它可以有前导零。 ISBN 应该是一种文本类型——您不希望在那里进行任何类型的“智能”数字调整/强制。

    我认为,最好保留原样并在 ISBN 上放置一个唯一索引。事后更改 SQLite 表结构可能会很尴尬。我不知道 Rails 的实现。

    【讨论】:

    • 在我问这个问题之前,我确实觉得在谷歌搜索时很尴尬!关于前导零的要点,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 2014-07-13
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多