我在我的Rails應用程序中有一個私有方法來連接到Amazon S3,執行傳遞的代碼塊,然後關閉與S3的連接。它看起來是這樣的;如何使我的控制器和模型在Rails中都可用?
def S3
AWS::S3::Base.establish_connection!(
:access_key_id => 'Not telling',
:secret_access_key => 'Really not telling'
)
data = yield
AWS::S3::Base.disconnect
data
end
它被這樣調用(作爲例子);
send_data(S3 {AWS::S3::S3Object.value("#{@upload_file.name}",'bucket')}, :filename => @upload_file.name)
我調用了一些在我的控制器和模型方法此方法,以便把它包含在兩個類的私有方法。這工作正常,我很高興,但它不是很乾。
如何讓我的模型和控制器都可以訪問此方法,但只有代碼出現一次?這更像是一個Ruby問題,而不是一個Rails問題,它反映了我對OOP的新鮮感。我猜測一個模塊或混合模式就是答案,但我到目前爲止還沒有真正使用過這兩種模塊,並且需要一些手動操作。
謝謝。
美麗的謝謝。我同意這屬於控制器,但是我之前寫了原始代碼,然後才真正知道自己在做什麼。模型中有很多東西不應該存在,但我寧願不要現在就重寫它。你的技術已經很好地工作了,我已經能夠使用它將S3方法包含在另一個控制器中,所以它是值得的。我對模塊和mixin的理解仍然不完美(他們混淆 - 我同意),但這對我來說幫助很大。 – brad 2010-08-29 11:29:13