【发布时间】:2015-05-27 09:50:43
【问题描述】:
假设我有一个派生自 ActiveRecord 的类。它有几个字段,外加一个“id”字段。创建了“id”,因此它的默认值是序列的“nextval”,因此每次保存新记录时它都会自动递增。它是通过以下方式创建的:
CREATE SEQUENCE id_sequence;
ALTER TABLE my_table ALTER COLUMN id SET DEFAULT nextval('id_sequence');
所以,现在在 Ruby 中,我填充对象中的字段,然后“保存!”它。现在我需要对对象做更多的工作,但“id”字段仍设置为 nil。 Ruby 中没有“加载”函数可以让我从数据库中重新加载对象。不管你怎么想,“!”在 ActiveRecord 中并不意味着它修改了原始对象(如果 Rails 不遵循它们,Ruby 约定的意义何在)。您似乎无法在原始对象中执行“self.find_by”。我能想到的唯一想法是在表的某些定义消息字段上调用“find_by”(这几乎是不可能的,因为这就是 id 的用途,但我还没有它!)并创建一个新对象并从中得到 id。
一定有更简单的方法。
【问题讨论】:
-
所以你是说调用
save!不会引发错误?save返回什么? -
我从未听说过“串行”列,它看起来不像是 ActiveRecord 数据类型之一:stackoverflow.com/questions/17918117/rails-4-datatypes
-
目前的答案似乎是在调用“保存”后使用“重新加载”。这至少比我之前做的黑客要好。
标签: sql ruby-on-rails postgresql activerecord sequence