【问题标题】:Models association: where to put the foreign_key模型关联:foreign_key 的放置位置
【发布时间】:2014-01-30 00:11:12
【问题描述】:

我正在开展一个控制向用户借出设备的项目。

它显示借出视图,呈现一个表单,用户可以通过选择框选择他/她想要的设备。如果选择框中没有设备,用户必须注册设备然后它会出现在那个借出视图表单中的选择框。

模型协会:

借出 has_many 设备

设备属于_借出

疑问是: 如果设备属于_to Lending,那么我必须将lending_id 放在设备中。

但是如果用户访问新设备视图并尝试注册新设备,它会 错过了借贷ID。

我该如何解决这个问题?

【问题讨论】:

  • 请提供更多关于您的模型的信息,具体来说,“借出”项目代表什么?另外:全新的物品不会借给任何人,是吗?
  • 假设有人想借一台“hp 笔记本电脑”,他将访问 Lending 表单并在选择框中选择 hp 笔记本电脑,然后会显示更多信息,例如用户名、设备品牌、设备的类别(我更喜欢简化问题,因为问题出在上面的关联中)然后他只需注册借出。新设备不会借给任何人。
  • 我想你们可能角色互换了:一件装备可能被多次借出,但每次“借出”只是一个事件。鉴于此,设备ID和用户ID都属于借贷,借贷成为设备和用户之间的多对多关系。

标签: ruby-on-rails-3.2 model-associations


【解决方案1】:

我的猜测是,您真正想要的是借贷成为用户到设备的多对多映射。

class User < ActiveRecord::Base
    has_many :lendings
    has_many :equipments, :through => :lendings

    # etc
end

class Equipment < ActiveRecord::Base
    has_many :lendings
    has_many :users, :through => :lendings

    # etc
end

class Lending < ActiveRecord::Base
    belongs_to :user
    belongs_to :equipment

    # etc
end

您可以编写方法,通过最新的有效借出方式为“当前”用户提供设备,反之亦然,此外,您还可以方便地查看设备的所有借出历史。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多