2012-01-06 143 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

相關問題