我正在使用产品模型构建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更改了我的代码以查找/创建。这似乎工作得很好,但是我希望能够找到更多关于这可能产生的后果,以及不使用主键的缺点。
答案 0 :(得分:0)
我希望能够更多地了解这可能带来的后果,以及不使用主键的缺点是什么。
你使用主键 - 它是prod_id
。您只是没有使用默认设置自动递增键(可能,prod_id
是自动递增和唯一约束?所以您可能只是为了约定而将其保留为id
。 )。
如果你告诉你的模型它正在使用不同的主键,你不需要做任何其他配置(或关联中的规范 - prod_id
将被反射拾取。)
class Product < ActiveRecord::Base
set_primary_key :prod_id
...
end
(不同版本的Rails已经完成了这样做的方法......检查API,无论你使用什么)
选择使用非默认主键毫无意义 - 您只需要某些字段来唯一标识每一行。它的名称以及它的数据类型实际上是无关紧要的 - 如果你真的想要,你可以配置你的应用程序使用GUID字符串作为ID: - )