我刚刚在轨道上生成了我的第一个脚手架。现在,我不希望我的表有一个名为“id”的字段。相反,我希望它被命名为“uid”,它将是一个任意字符串。但我似乎无法理解如何做到这一点。特别是管理路线。我设法设置:id => false并将“uid”定义为主键,但控制器失败,因为它仍然尝试按ID查找。我该如何处理?
另外,我不知道的其他任何事情可能会受到打击?
并且,我知道rails是关于约定和所有的,我不能试图反对“轨道方式”,但我真的希望这个东西以这种方式工作。
答案 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%。
快乐鳕鱼。