2012-01-06 47 views
0

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

但是URL(当然)在create方法中是未知的,因为没有id在给定对象的那一点存在。

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

+0

你的问题是有点模糊,但你不能在你的模型建立在'after_create'回调图像? – Mischa 2012-01-06 15:34:50

+0

@Mischa好点,但我无法访问我的模型中的url-helper方法来创建我的qr-image – choise 2012-01-06 15:50:11

+0

为什么不呢? http://stackoverflow.com/questions/341143/can-rails-routing-helpers-i-e-mymodel-pathmodel-be-used-in-models – Mischa 2012-01-06 15:56:31

回答

2

除了在URL中使用非id列(例如,调用以生成UDID/GUID并在url中使用该列),我没有看到一个明显的方式来做到这一点,或者节省两个阶段,采用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 
+0

但我无法访问我的模型中的url-helpers,我? – choise 2012-01-06 15:44:40

+1

'Rails.application.routes.url_helpers'将允许你访问所有的_path和_url帮手 – 2012-01-06 15:53:53

+0

工作正常,谢谢。什么反对使用'before_destroy'过滤器删除图像?在我的模型中做这件事可以吗? – choise 2012-01-09 12:08:47

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)中,密钥可以完全在客户端上生成。

+0

好吧,所以这不是一个不寻常的模式?做了这个测试,发现它有点奇怪。 – choise 2012-01-06 15:36:20

+1

如果这是你想要的,你最好使用'after_create'回调。 – Mischa 2012-01-06 15:38:25

+0

让我这样说:我不经常看到它。 :-) – 2012-01-06 15:38:58

相关问题