模型在Rails 4中创建另一个模型的多个不同实例,没有统一耦合

时间:2015-02-27 18:40:15

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

有一个ActiveRecord模型被认为是最佳做法,根据分配的值,它会生成单独模型的实例?我担心我的模型对彼此了解太多,并且正在变得难以编写测试,并且正在寻找正确的“Rails方式”来解决这个问题。

本质上,第一个模型是一个规范,它确定实例的数量和分配给另一个模型的那些实例的属性。我希望能够自由地更改该规范或个别实例。

我正在为我的公司创建一个预算编制应用程序。我们的想法是将现金流量跟踪为我的Transaction模型所代表的一系列交易。

我不希望用户必须手动输入每个事务(但我希望他们能够在以后需要时编辑每个事务),因此我创建了CashRevenueCashExpense模型,用户可以输入诸如开始日期,结束日期和增长率之类的内容,这些内容会持久存储到数据库,然后触发处理信息的非ActiveRecord模型TransactionBuilder并调用Transaction.new()正确的数字时间并正确设置属性。

为了实现这一点,我有CashRevenueCashExpense调用TransactionBuilder.build_transactions(self)来分配实例变量,调用方法来删除与调用对象关联的任何现有事务(如果它是更新的话)动作)。

由于收入交易在应用程序中的处理方式与费用不同,因此我在创建之前通过@cashflow_type = cashflow_item.class.to_s检查类型。

然后按如下方式创建交易:

def self.add_transactions
  number_of_occurences.times do
    add_transaction
end

end

def self.add_transaction

  transaction = Transaction.new()

  if @cashflow_type == "CashExpense"
    transaction.cash_expense_id = @cashflow_item.id
  else
    transaction.revenue_id = @cashflow_item.id
    transaction.planned_number_of_customers = get_number_of_customers
    transaction.planned_arpu_amount = get_arpu_amount
  end

  transaction.planned_amount = get_transaction_amount 
  transaction.planned_date = get_transaction_date
  transaction.edit_method = "SYSTEM"
  transaction.user_id = @cashflow_item.user_id

  if transaction.save!
    @last_transaction = transaction
  end

是否有更好的方法来构建我的应用程序以实现相同的任务,同时使我的模型不那么紧密耦合?我期望这个应用程序在复杂性方面快速增长,所以希望尽可能保持模块化。

我的应用程序模型的铁路图:https://github.com/jamesconnolly93/investablemvp/blob/master/doc/models_brief.svg

非常感谢任何帮助!

0 个答案:

没有答案