需要在create上生成一个包含id的对象

时间:2012-01-06 15:29:28

标签: ruby-on-rails ruby ruby-on-rails-3 oncreate

所以我需要在模型创建方法中创建属于我的模型的图像(带有图像的URL的字符串)。 问题是,这个图像是一个QR码,它应该包含被创建的对象的URL。

但是(当然)URL在create方法中是未知的,因为在该点上对于给定对象不存在id。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我没有看到明显的方法,除了在URL中使用非id列之外(例如,调用生成UDID / GUID,并在URL http://mysite.com/obj/# {udid}中使用它),或保存两个阶段,使用after_create回调设置保存记录后的图像:

class MyModel < ActiveRecord::Base

  after_create :set_image

  def set_image
    if image_attribute == nil
      image_attribute = generate_a_qr_code(self)
      self.save
    end
  end

end

答案 1 :(得分:0)

使用双程保存: - )

def create
   model = Model.new params[:model]

   if model.save
     # at this point you have an id
     model.qr = generate_qr model
     model.save

     # proceed as usual
  end
end

这适用于以自动增量列为主键的传统数据库。在某些数据库中,密钥是使用序列生成的,您可以查询这些序列以获取新值(在保存对象之前)。在某些数据库(MongoDB)中,可以在客户端上完全生成密钥。