Ruby on rails 需要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
技术人员
(执行签出)和签出
(如交易)非常有意义。然而,我正在努力解决结账
和借出电脑
之间的关系
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