2009-09-20 98 views
0

我有一個圖像,belongs_to一個用戶和一個二進制文件(物理文件屬性存儲在一個單獨的模型)。在過去(讀:昨天),我手動設置的USER_ID值:在Rails中設置關聯的ID

@image = Image.new(params[:image]) 
@image.user_id = current_user 

一個朋友最近避讓我的事實,我應該用協會代替,所以我的控制器代碼變成了:

@image = current_user.image.new(params[:upload]) 

這當然更好,而且效果很好。現在我想爲我的二元關聯做類似的事情,但我不知道如何。提取和存儲我的二進制文件是由一個BinaryObserver類完成的,該類觀察Image模型。在觀察者的before_validation回調中,上傳的文件被髮送到Binary類,並且創建/存儲二進制對象。一旦存儲,我需要爲我的圖像模型設置binary_id值。我一直在用手動的方式去做,但現在我覺得我應該以另一種方式來做。下面是我在BinaryObserver#before_validation

def before_validation(model) 
    binary   = Binary.new.upload(model.upload) rescue raise 
    binary   = binary.store() 
    model.binary_id = binary.id 
rescue => e 
    # 
    # Rethrow any exception that was raised. 
    # 
    raise 
end 

我應該做這樣的其他方式?如果是這樣,怎麼樣?在多關聯場景中,我看不到一種方法可以「自動」設置多個外鍵值。

謝謝。

Rob

回答

0

我想我找到了正確的答案。相反,設置一個變量來保存新創建的Binary實例,我設置的關聯本身:這似乎做什麼我之後

model.binary = Binary.new.upload(model.upload) rescue raise 

。它自動設置外鍵值,並允許我直接對相關對象進行操作。

0

你還有一個has_one/belongs_to關係的圖像/二進制?這可能是有用的...

+0

我這樣做。圖像屬於二進制和二進制has_one圖像。 – 2009-09-21 01:28:13