gpt4 book ai didi

ruby-on-rails - 允许引用为空的自连接关联可以完成吗?

转载 作者:行者123 更新时间:2023-12-04 06:34:58 25 4
gpt4 key购买 nike

我的应用有一个 Waiter 模型来管理等候名单上的人员名单。每个“服务员”都可以推荐其他人加入名单。另外,我想查明谁推荐了特定的服务员。

我定义了一个自连接关联,以便每个服务员都可以引用裁判,所以我在我的模型中完成了以下操作:

#models/waiter.rb
class Waiter < ApplicationRecord
has_many :referrals, class_name: "Waiter",
foreign_key: "referee_id"
belongs_to :referee, class_name: "Waiter"
end

加上迁移了以下迁移:

class AddRefereeReferenceToWaiters < ActiveRecord::Migration[5.1]
def change
add_reference :waiters, :referee, index: true
end
end

这似乎是一个合乎逻辑的解决方案,但是,某些“服务员”可能不会被任何人推荐,在这种情况下,我想将服务员表中的 referee_id 留空。同样的情况发生在第一个服务员身上(谁不会被任何人推荐。

因此,当尝试将任何新服务员保存到数据库时,我面临着错误 :referee=>["must exist"] 的回滚。

然后是否可以指示 Rails 不验证引用 ID 的存在?

我尝试在 Controller 为空时在 Controller 中添加一个零的 referee_id,但这也会被回滚。

最佳答案

Since Rails 5当您定义 belongs_to 关联时,默认情况下它是必需的

要使 referee 可选,您需要提供 optional: true 选项:

class Waiter < ApplicationRecord
has_many :referrals, class_name: "Waiter",
foreign_key: "referee_id"
belongs_to :referee, class_name: "Waiter", optional: true
end

关于ruby-on-rails - 允许引用为空的自连接关联可以完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45321131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com