我有三个应用程序:网站,POS和经理。 Manager应用程序在根目录中安装了Manager Engine。 Manager引擎是对核心模型(事件,葡萄酒等)进行所有更新的地方。其他两个应用程序也安装了引擎,但它们充当了#34; slave引擎"。即,它们会定期与主管理器应用程序同步,但不允许更改manager_表中的数据。
我想知道合并的最佳方法是什么? Manager :: Wine对象中必要的属性到POS的Item对象。
项目包含category_id, barcode, name, price, sale_price, stock, force_price_negative, ...etc
。其中一些属性与Manager :: Wine重叠,例如barcode, name, price, sale_price, stock
。我希望Item对象从manager_wines表继承这些属性,但仅当category_id为1(Wines)时。一个项目可以属于任何其他类别,因此它不像所有项目都将使用manager_wines中的属性。
在我的头顶,最通用的'这样做的方法是在Item中有两个额外的属性(model, model_id
...其中model是Manager::Wine
,id是manager_wines中的对应id。我只是不知道是否有更简单或更健壮的方法。
答案 0 :(得分:0)
Whelp,我在解决方案中苦苦挣扎。
在项目模型中:
belongs_to :manager, :polymorphic => true
# Override local methods with Manager object methods
[:barcode, :name, :price, :sale_price, :stock, :taxed, :tax_included].each do |att|
define_method(att) do
if manager_id.blank?
read_attribute(att)
else
manager.send(att)
end
end
end
在项目表格中,添加:
manager_id :integer
manager_type :string
似乎工作正常。但有一点需要注意的是,如果由于某种原因我特意尝试使用order('categories.name')
,那么急切加载多态关联会失败 - 即使类别表与引擎模型没有任何关系。不然它很好。