我正在构建我的第一个Rails项目,它是计算机租用池的结账系统。创建Technicians
(执行结帐)和CheckOuts
(如交易)非常有意义。但是,我正在努力解决CheckOuts
和LoanerComputers
之间的关系。
Technician
和CheckOut
的关系为1:N,CheckOut
和LoanerComputer
的关系为1:1。我相信我的Rails-n00b心脏,拥有关联代理是很好的,例如Technician.check_outs.loaner_computers
甚至更好Technician.loaner_computers
,但是从我所学到的内容来看,这意味着我的LoanerComputer
类必须包含belongs_to
,并假设LoanerComputer
1}}我的数据库中的表有一个check_out_id
列。
我试过从租赁""方法,但我看到很多解决方案都有第四个模型来存储被租用的东西的状态变化。"对我而言,在单个technician_id
条目中使用loaner_computer_id
和CheckOut
会更有意义,但是如何使用关联轻松访问技术人员的已检出借用计算机代理?是否可以在此实例中使用: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
LoanerComputers
和LoanerComputers
has_many
CheckOuts
吗?
感谢您的时间!如果有任何需要澄清,请告诉我!
答案 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