Ruby on rails 在Rails 4中创建另一个模型的多个不同实例,而无需进行不必要的耦合

Ruby on rails 在Rails 4中创建另一个模型的多个不同实例,而无需进行不必要的耦合,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,拥有一个ActiveRecord模型的最佳实践是什么?该模型根据分配的值生成单独模型的实例?我担心我的模型彼此“了解”太多,编写测试变得越来越困难,我正在寻找解决这个问题的正确“Rails方法” 从本质上讲,第一个模型是一个规范,用于确定实例的数量以及分配给另一个模型的这些实例的属性。我希望能够自由地更改该规范或单个实例 我正在为我的公司创建一个预算应用程序。其思想是将现金流作为一系列交易进行跟踪,这些交易由我的交易模型表示 我不希望用户必须手动输入每笔交易(但我希望他们能够在以后根据需要编辑每

拥有一个ActiveRecord模型的最佳实践是什么?该模型根据分配的值生成单独模型的实例?我担心我的模型彼此“了解”太多,编写测试变得越来越困难,我正在寻找解决这个问题的正确“Rails方法”

从本质上讲,第一个模型是一个规范,用于确定实例的数量以及分配给另一个模型的这些实例的属性。我希望能够自由地更改该规范或单个实例

我正在为我的公司创建一个预算应用程序。其思想是将现金流作为一系列交易进行跟踪,这些交易由我的
交易
模型表示

我不希望用户必须手动输入每笔交易(但我希望他们能够在以后根据需要编辑每笔交易),因此我创建了
CashRevenue
CashExpense
模型,用户可以在其中输入诸如开始日期之类的内容,将结束日期和增长率持久化到数据库,然后触发非ActiveRecord模型
TransactionBuilder
,该模型处理信息并调用
Transaction.new()
正确的次数并正确设置属性

为了实现这一点,我有
CashRevenue
CashExpense
调用
TransactionBuilder。build\u transactions(self)
分配实例变量,调用一个方法删除与调用对象关联的任何现有事务(如果是更新操作)

由于收入交易在应用程序中的处理方式与费用不同,因此我在创建之前通过执行
@cashflow\u type=cashflow\u item.class.to\u 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
有没有更好的方法来构建我的应用程序,以实现相同的任务,同时减少模型之间的紧密耦合?我期望这个应用程序在复杂性上快速增长,所以希望尽可能保持模块化

我的应用程序模型的Railroady图:

任何帮助都将不胜感激