Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails非整数主键_Ruby On Rails_Primary Key - Fatal编程技术网

Ruby on rails rails非整数主键

Ruby on rails rails非整数主键,ruby-on-rails,primary-key,Ruby On Rails,Primary Key,我有一张叫做合同的桌子。它当前的默认主键是Rails自动生成的:id字段,它是一个整数。我希望有一个名为construcd的字段,它是字符串类型,并将其用作主键。我想知道的是: 这是最佳实践吗?这样做有没有潜在的问题 我会怎么做 您可能知道,Rails支持即时更改主id列: class Contract < ActiveRecord::Base self.primary_key = "contractId" end classcontract

我有一张叫做合同的桌子。它当前的默认主键是Rails自动生成的:id字段,它是一个整数。我希望有一个名为construcd的字段,它是字符串类型,并将其用作主键。我想知道的是:

  • 这是最佳实践吗?这样做有没有潜在的问题

  • 我会怎么做


  • 您可能知道,Rails支持即时更改主id列:

    class Contract < ActiveRecord::Base
      self.primary_key = "contractId"
    end
    
    classcontract
    请注意,即使
    construcd
    列具有唯一索引,字符串列上的索引也总是比整数列中的索引慢一点


    此外,这不是Rails的方式,可能会混淆使用此应用程序的其他开发人员。尤其是当表具有非标准主键时,构建关联或路由更容易出错。这是尽可能长时间避免使用此技术的一个很好的理由。

    您可能知道,Rails支持即时更改主id列:

    class Contract < ActiveRecord::Base
      self.primary_key = "contractId"
    end
    
    classcontract
    请注意,即使
    construcd
    列具有唯一索引,字符串列上的索引也总是比整数列中的索引慢一点

    此外,这不是Rails的方式,可能会混淆使用此应用程序的其他开发人员。尤其是当表具有非标准主键时,构建关联或路由更容易出错。我认为这是尽可能长时间避免使用这种技术的一个很好的理由。

    RubyonRails(RoR)喜欢强调约定优于配置的概念。因此,它寻求最小化配置量。 因此,如果您希望使用字符串类型的construct,那么您可以在表中添加一个额外字段,并在任何地方使用它,并让Rails使用id作为primarykey

    更改主密钥 生成一个新的迁移文件名为“ChangePrimaryKey”(您可以给出任何名称)

    class ChangePrimaryKey
    如果要创建新表,则迁移可能如下所示:

    class AddTableWithDifferentPrimaryKey < ActiveRecord:Migration
      def change
        create_table :table, id: false do |t|
          t.string :id, null: false
          # other columns
          t.timestamps
          execute "ALTER TABLE table ADD PRIMARY KEY (id);"
        end
      end
    end
    
    class AddTableWithDifferentPrimaryKey
    注意传递到表中的id:false选项-这要求Rails不要代表您创建主键列

    对模型的更改 在模型中,必须添加以下行,以便 Rails以编程方式查找要用作主键的列

    class Table < ActiveRecord::Base
      self.primary_key = :id
    
      # rest of span
    end
    
    类表
    我希望你能做剩下的事情

    如果您想看到Rails真正的魔力,请不要更改默认id:)

    RubyonRails(RoR)喜欢强调约定优于配置的概念。因此,它寻求最小化配置量。 因此,如果您希望使用字符串类型的construct,那么您可以在表中添加一个额外字段,并在任何地方使用它,并让Rails使用id作为primarykey

    更改主密钥 生成一个新的迁移文件名为“ChangePrimaryKey”(您可以给出任何名称)

    class ChangePrimaryKey
    如果要创建新表,则迁移可能如下所示:

    class AddTableWithDifferentPrimaryKey < ActiveRecord:Migration
      def change
        create_table :table, id: false do |t|
          t.string :id, null: false
          # other columns
          t.timestamps
          execute "ALTER TABLE table ADD PRIMARY KEY (id);"
        end
      end
    end
    
    class AddTableWithDifferentPrimaryKey
    注意传递到表中的id:false选项-这要求Rails不要代表您创建主键列

    对模型的更改 在模型中,必须添加以下行,以便 Rails以编程方式查找要用作主键的列

    class Table < ActiveRecord::Base
      self.primary_key = :id
    
      # rest of span
    end
    
    类表
    我希望你能做剩下的事情


    如果您想看到Rails real Magics:),请不要更改默认id。

    Hi-谢谢您的帮助。我尝试了以下代码:class ChangePk:id第2列。重命名
    :收缩