rails:创建一个没有id的表

时间:2010-07-28 13:59:45

标签: ruby-on-rails routing

我刚刚在轨道上生成了我的第一个脚手架。现在,我不希望我的表有一个名为“id”的字段。相反,我希望它被命名为“uid”,它将是一个任意字符串。但我似乎无法理解如何做到这一点。特别是管理路线。我设法设置:id => false并将“uid”定义为主键,但控制器失败,因为它仍然尝试按ID查找。我该如何处理?

另外,我不知道的其他任何事情可能会受到打击?

并且,我知道rails是关于约定和所有的,我不能试图反对“轨道方式”,但我真的希望这个东西以这种方式工作。

4 个答案:

答案 0 :(得分:2)

在您的迁移中更新代码如下:

create_table :table_name, :primary_key => :uid do |t|
...
end

你的模型应该包括这一行:

class ModelName < ActiveRecord::Base
  set_primary_key :uid
end

所有操作都与普通id列相同。

Model.find将通过uid找到,而不是id等...

答案 1 :(得分:0)

您应该能够通过以下方式查找记录:

@record = Model.find('foo')

@record = Model.find_by_uid('foo')

答案 2 :(得分:0)

请确保您在迁移文件中有:

create_table :table_name, :primary_key => :uid do |t|
...

然后插入您的模型中:

self.primary_key = "uid"

并找到你的记录John Topley说:

@record = Model.find('foo')

这应该有效

答案 3 :(得分:0)

现有答案虽然对较旧版本适用,但已经过时了,因此更新如下:

(基于retro的+1答案:)

迁移:

create_table :table_name, id: false, :primary_key => :uid do |t|
...
end

型号:

class ModelName < ActiveRecord::Base
  self.primary_key= :uid
end

注意:,我相信此更改可以追溯到〜rails 3,但是我对此不确定100%。

快乐鳕鱼。