我在我的Rails应用程序中有一个私有方法,用于连接到Amazon S3,执行传递的代码块,然后关闭与S3的连接。它看起来像这样;
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)
我在我的控制器和模型中以多种方式调用此方法,因此将其作为私有方法包含在两个类中。这很好用,我很满意,但不太符合DRY原则。
如何使此方法可供我的模型和控制器使用,但只出现一次代码?这更像是一个Ruby问题而不是Rails问题,反映了我对面向对象编程(OOP)的新鲜感。我猜想模块或混入(mix-in)是答案,但我到目前为止还没有真正使用过它们,需要一点指导。
谢谢。