保存之前获取Rails模型的ID ...?

ama*_*euk 16 ruby-on-rails

如何在保存之前获取rails模型的id?

例如,如果我创建一个新的模型实例,如何在保存之前获取其ID?

我知道id是在onsave上创建的并且根据数据库但是有一个解决方法吗?

Rub*_*cer 6

我也在寻找这个,我找到了答案:

假设模型名称为"Model",表名为"models"

model.rb

before_save {
    next_id=Model.connection.select_value("Select nextval('models_id_seq')")
}
Run Code Online (Sandbox Code Playgroud)

这将输出您的记录将获取的值,如果它被保存

  • 我不认为这是"线程安全的",这意味着两个并发进程将获得相同的id,然后两者都使用它. (8认同)
  • 这应该是线程安全的;`nextval`增加序列并自动返回新值(http://www.postgresql.org/docs/8.1/static/functions-sequence.html) (2认同)
  • before_create 似乎更合适。在您的示例中使用 before_save 会导致即使更新记录,序列也会增加。 (2认同)

Max*_*ams 5

通常当人们认为他们需要这样做时,他们实际上并不需要这样做.就像John说的那样,解释一下你想要做什么,有人可以建议一种方法来做到这一点,而不必提前知道id.

  • 这不是答案。参见/sf/ask/242683591/#comment96704151_3467735 (2认同)