Rails模型关系建议需要

时间:2014-08-26 13:50:20

标签: ruby-on-rails activerecord associations

我正在构建我的第一个Rails项目,它是计算机租用池的结账系统。创建Technicians(执行结帐)和CheckOuts(如交易)非常有意义。但是,我正在努力解决CheckOutsLoanerComputers之间的关系。

TechnicianCheckOut的关系为1:N,CheckOutLoanerComputer的关系为1:1。我相信我的Rails-n00b心脏,拥有关联代理是很好的,例如Technician.check_outs.loaner_computers甚至更好Technician.loaner_computers,但是从我所学到的内容来看,这意味着我的LoanerComputer类必须包含belongs_to,并假设LoanerComputer 1}}我的数据库中的表有一个check_out_id列。

我试过从租赁""方法,但我看到很多解决方案都有第四个模型来存储被租用的东西的状态变化。"对我而言,在单个technician_id条目中使用loaner_computer_idCheckOut会更有意义,但是如何使用关联轻松访问技术人员的已检出借用计算机代理?是否可以在此实例中使用: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

P.S。我只是倒退吗?我应该说Technicians has_many LoanerComputersLoanerComputers has_many CheckOuts吗?

感谢您的时间!如果有任何需要澄清,请告诉我!

1 个答案:

答案 0 :(得分:2)

我认为,你正在寻找的东西 - &#34; has_many through&#34;协会。 http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

在你的情况下 - 它看起来像这样

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

有了这个 - 您将能够从技术人员那里获得贷款人并进行反向

Technician.loaners
Loaner.technicians

您还可以从两个模型访问check_outs