Ruby on rails 需要Rails模型关系建议

Ruby on rails 需要Rails模型关系建议,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我正在构建我的第一个Rails项目,它是一个计算机借贷者池的结账系统。创建技术人员(执行签出)和签出(如交易)非常有意义。然而,我正在努力解决结账和借出电脑之间的关系 technology和CheckOut具有1:N关系,CheckOut和LoanerComputer具有1:1关系。我相信在我的Rails-n00b心中,拥有关联代理会很好,例如技术员。签出。借贷者计算机,或者更好的技术员。借贷者计算机,但据我所知,这意味着我的借贷者计算机类必须包含属于,这假设数据库中的LoanerCompute

我正在构建我的第一个Rails项目,它是一个计算机借贷者池的结账系统。创建
技术人员
(执行签出)和
签出
(如交易)非常有意义。然而,我正在努力解决
结账
借出电脑
之间的关系

technology
CheckOut
具有1:N关系,
CheckOut
LoanerComputer
具有1:1关系。我相信在我的Rails-n00b心中,拥有关联代理会很好,例如
技术员。签出。借贷者计算机
,或者更好的
技术员。借贷者计算机
,但据我所知,这意味着我的
借贷者计算机
类必须包含
属于
,这假设数据库中的
LoanerComputer
表有一个
check\u-out\u-id

我试着从“租赁”的角度来考虑,但我看到很多解决方案都有第四种模型来存储“租赁”对象的状态变化。对我来说,在一个
签出
条目中包含
技术人员id
借贷者计算机id
,更有意义,但是,如何使用关联代理轻松访问技术人员的签出借贷者计算机?在这种情况下,是否可以使用
:delegate
,或者看起来我必须通过技术人员定制一种方法来读取借出的计算机?下面是示例代码:

class Technician < ActiveRecord::Base
  has_many :check_outs
end

class CheckOut < ActiveRecord::Base
  belongs_to :technician

  # has_one :loaner_computer
  #   OR
  # belongs_to :loaner_computer (which means I need to have a "loaner_id" column in the db, right?)
end

class LoanerComputer < ActiveRecord::Base
  # belongs_to :check_out (which means I need to have a "check_out_id" column in the db)
  #   OR
  # has_one :check_out
end
class技师
还有,我是不是把一切都倒过来了?我应该说
技术人员
有很多
借来的电脑
,而
借来的电脑
有很多
结账


谢谢你的时间!如果需要澄清,请告诉我

我想,你要找的是“通过”联想。

在你的情况下,看起来是这样的

class Technician < ActiveRecord::Base
  has_many :check_outs
  has_many :loaners, through: :check_outs
end

class CheckOut < ActiveRecord::Base
  # Must have technician_id and check_out_id fields in DB
  belongs_to :technician
  belongs_to :check_out
end

class Loaner < ActiveRecord::Base
  has_many :technicians, through: :check_outs
end

您还可以访问这两种型号的签出功能

如果您发现很难让关联实现您想要的功能,您可以尝试使用scopes。他们不允许将借贷者直接分配给技术人员,但这似乎毫无意义。无论哪种方式,你能描述一下“借贷者”的角色吗?我不确定我是否理解它所代表的意义。我想知道你真正想要的是一种“有很多贯穿”的关系。也就是说,一个技术人员通过结帐有很多借贷者。借贷者可以向技术人员询问结帐联接表。这是一种完全不同的思考方式,如果您是Rails协会的新手,您可能不会立即想到它。@AFaderDarkly编辑了我的问题,并将“Loaner”改为“LoanerComputer”。作为一名技术人员,我会从可用池中取出一台借贷者计算机,并为客户检查。我会认为,如果您对计算机本身(借贷者计算机)进行建模,那么一台计算机可以在其生命周期内多次借出,因此借贷者计算机和签出之间存在1:多的关系。除非我弄错了,或者结帐在结帐后被销毁。是的,关于当前贷款结帐的良好验证应该与协会分开进行。协会不在乎时间。这看起来不错-只有你需要一个借贷者的
多:签出才能完整。它确实打破了最初的规范,即签出和借出者之间的关系是1:1,但从评论来看,这似乎是一个错误。@afaderly,我的想法正是如此。
Technician.loaners
Loaner.technicians