Ruby on rails 需要在创建时生成包含id的对象

Ruby on rails 需要在创建时生成包含id的对象,ruby-on-rails,ruby,ruby-on-rails-3,oncreate,Ruby On Rails,Ruby,Ruby On Rails 3,Oncreate,因此,我需要在modelscreate方法中创建一个属于我的模型的图像(带有图像url的字符串)。 问题是,这个图像是一个QR码,应该包含创建的对象的url 但是URL(当然)在create方法中是未知的,因为给定对象的那个点上不存在id 有没有办法解决这个问题?使用两次保存:-) 这适用于以自动增量列作为主键的传统数据库。在某些数据库中,键是使用序列生成的,您可以查询这些序列以获取新值(在保存对象之前)。在某些数据库(MongoDB)中,可以在客户端上完全生成密钥。除了在URL中使用非id列(

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

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

有没有办法解决这个问题?

使用两次保存:-)


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

除了在URL中使用非id列(例如,调用生成UDID/GUID,并在URL{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
classmymodel
你的问题有点含糊,但是在你的模型中创建回调后,你不能在
中创建图像吗?@misch这是一个很好的观点,但是我无法访问模型中的url帮助器方法来创建我的qr图像为什么不能?好吧,这不是一个不寻常的模式?这样做是为了测试,发现有点奇怪。如果这是您想要的,最好在创建后使用
回调。让我这样说:我不经常看到它。:-)但是我无法访问我的模型中的url帮助程序,是吗?
Rails.application.routes.url\u帮助程序
将允许您访问所有的路径和url帮助程序,谢谢。有什么反对在销毁前使用
过滤器删除图像的吗?在我的模型中这样做可以吗?
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