所以我需要在模型创建方法中创建属于我的模型的图像(带有图像的URL的字符串)。 问题是,这个图像是一个QR码,它应该包含被创建的对象的URL。
但是(当然)URL在create方法中是未知的,因为在该点上对于给定对象不存在id。
任何想法如何解决这个问题?
答案 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)中,可以在客户端上完全生成密钥。