Rails - 使用不同的主键

时间:2013-10-03 03:52:30

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

我正在使用产品模型构建rails 3应用程序。我一直试图找到一种方法来使用产品ID号作为标识符,而不是使用模型默认ID。

我最初尝试使用to_param方法,但是无法让它正常工作。

然后,我使用产品ID号而不是主键重建我的数据库,如下所示:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products, :id => false, :primary_key => :prod_id do |t|
      t.string   "prod_id"
      t.string   "upc"
      t.text     "title"
      t.text     "description"
      t.timestamps
    end
  end
end

并使用prod_id更改了我的代码以查找/创建。这似乎工作得很好,但是我希望能够找到更多关于这可能产生的后果,以及不使用主键的缺点。

1 个答案:

答案 0 :(得分:0)

  

我希望能够更多地了解这可能带来的后果,以及不使用主键的缺点是什么。

使用主键 - 它是prod_id。您只是没有使用默认设置自动递增键(可能,prod_id是自动递增和唯一约束?所以您可能只是为了约定而将其保留为id。 )。

如果你告诉你的模型它正在使用不同的主键,你不需要做任何其他配置(或关联中的规范 - prod_id将被反射拾取。)

class Product < ActiveRecord::Base
  set_primary_key :prod_id
  ...
end

(不同版本的Rails已经完成了这样做的方法......检查API,无论你使用什么)

选择使用非默认主键毫无意义 - 您只需要某些字段来唯一标识每一行。它的名称以及它的数据类型实际上是无关紧要的 - 如果你真的想要,你可以配置你的应用程序使用GUID字符串作为ID: - )