前言 这并不完全是对这个问题的回答,但是搜索这种功能的人可能会发现这很有用。在大肆将其放入生产环境之前,请仔细考虑此选项和其他选项。
在某些情况下,您可以利用 has_one 关系来获得您想要的。同样,在使用它之前,请真正考虑您要完成的工作。
要考虑的代码
你有一个has_many
关系 from Trunk
toBranch
并且你想添加一个新的分支。
class Trunk
has_many :branches
end
class Branch
belongs_to :trunk
end
我也可以将它们单独联系起来。我们将添加一个has_one
关系到Trunk
class Trunk
has_many :branches
has_one :branch
end
此时,您可以执行以下操作,Tree.new.branch = Branch.new
并且您将建立一个不会立即保存的关系,但在保存后,将可以从Tree.first.branches
.
然而,当新开发人员查看代码并思考“嗯,到底应该是一个还是多个?”时,这给新开发人员带来了相当混乱的情况。
为了解决这个问题,我们可以has_one
与 a 建立更合理的关系scope
。
class Trunk
has_many :branches
# Using timestamps
has_one :newest_branch, -> { newest }, class_name: 'Branch'
# Alternative, using ID. Side note, avoid the railsy word "last"
has_one :aftmost_branch, -> { aftmost }, class_name: 'Branch'
end
class Branch
belongs_to :trunk
scope :newest, -> { order created_at: :desc }
scope :aftmost, -> { order id: :desc }
end
请注意这一点,但它可以完成 OP 中要求的功能。