2

所以我正在开发一个 Rails 应用程序来感受整个事情。我有Product一个标准 ActiveRecord 模型的模型。但是,我还想从 Amazon ECS 获得一些额外的产品信息。所以我的完整模型从数据库中获取一些信息,从网络服务中获取一些信息。我的问题是,我应该:

  1. 将两个模型制作为 Product 和 ProductAWS,然后在控制器级别将它们绑定在一起。

  2. Product ActiveRecord 模型是否包含执行所有 AWS 工作的 ProductAWS 对象?

  3. 只需将所有 AWS 功能添加到我的产品模型中。

  4. ???

4

4 回答 4

0

您可以使用composed_ofActiveRecord 中的关系。您使用您通过 AWS 管理的所有属性创建一个常规类,并指定您的 Product-class 由该类组成。ActiveRecord 将处理映射属性与此类的委托。

请参阅composed_of的文档

于 2008-09-16T08:49:03.633 回答
0

@Menno

ActiveResource用于 AWS-attributes 类怎么样?

于 2008-09-16T08:55:11.717 回答
0

与大多数事情一样:这取决于。你的每一个想法都有优点。如果是我,我会这样开始:

  class Product < ActiveRecord::Base
     has_one :aws_item
  end 
  class AWSItem 
     belongs_to :product
  end

您想问自己的关键问题是:

您是否只提供 AWS ECS 项目,还是提供其他产品?如果您的产品与亚马逊无关,不关心 ASIN 等,那么 has_one 可能是您的选择。或者,更好的是,与 :vendable 接口的多态关系,以便您以后可以插入不同的扩展类型。

仅仅是行为不同,还是数据也会有很大不同?因为您可能要考虑:

class Product < ActiveRecord::Base
end 
class AWSItem < Product
  def do_amazon_stuff
    ... 
  end
end

当 Amazon ECS 不可用时,您希望系统如何运行?它应该抛出异常吗?还是应该依赖目录的本地缓存版本?

class Product < ActiveRecord::Base

end

class ItemFetcher < BackgrounDRb::Rails
   def do_work
      # .... Make a cached copy of your ECS catalog here. 
      # Copy the Amazon stuff into your local model
   end
end

慢慢地走过这些问题,答案会变得更清晰。如果没有,请开始制作原型。祝你好运!

于 2008-09-16T19:43:21.207 回答
0

如果您从两个完全不同的来源(一方面是 ActiveRecord,另一方面是 Internet)检索数据,将这些作为单独的模型有很多好处。正如上面的海报所写,产品 has_one(或 has_many):aws_item。

于 2008-09-16T22:33:32.030 回答