我看过论坛,通过教程学习并查看了Rails指南,但似乎无法找到我正在寻找的内容。
我正在尝试为我工作的公司创建一个安全应用程序,我正在创建报表。我希望报告编号为升序编号但不确定要搜索或执行此操作的内容。
我使用PostgreSQL作为dev和prod的数据库。
答案 0 :(得分:2)
如果将id
列设置为主键(通常情况下),则可以使用该列。它对每个报告都是唯一的,永远不会重复,并且每个新报告都会增加一个报告。
或者您可以为报告#创建一个列并使用:
CREATE TABLE tablename (
colname SERIAL
);
这等于:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
这将允许您通过以下方式设置起始编号:
SELECT setval('colname', 42, false);
false
表示分配的第一个数字是42,而不是43.如果省略或设置为true,它将返回43作为序列中的第一个值。
Postgres中序列的一个重要方面是每次都会分发一个新的数字,即使该行由于事务失败而无法停留。所以你可能会在序列中缺少数字。
请务必阅读:http://www.postgresql.org/docs/9.3/static/functions-sequence.html
如果这是一个问题,您可能只想通过执行以下操作来完成Rails中的所有操作:
next_number = Report.select(:id).order('id DESC').limit(1).pluck(:id).first + 1
并对列具有唯一约束以确保没有重复的数字。
对于其他数据库,请参阅:http://www.w3schools.com/sql/sql_autoincrement.asp