0

我正在使用产品模型构建 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 查找/创建。这似乎工作得很好,但是我希望更多地了解这可能产生的任何后果,以及不使用主键的缺点可能是什么。

4

1 回答 1

0

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

正在使用主键 - 它是prod_id. 您只是没有使用默认设置的自动递增键(可能是自动递增且唯一受约束的?所以为了约定prod_id,您还不如离开它......)。id

如果您告诉您的模型它正在使用不同的主键,则您不需要进行任何其他配置(或关联中的规范 -prod_id将通过反射获取)。

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

(不同版本的 Rails 使用了执行此操作的方法...检查 API 以了解您正在使用的任何内容)

选择使用非默认主键并没有什么神奇之处——您只需要一些唯一标识每一行的字段。它的名称以及它的数据类型实际上是无关紧要的——如果你真的想要,你可以将你的应用程序配置为使用 GUID 字符串作为 ID :-)

于 2013-10-03T08:03:10.577 回答