gpt4 book ai didi

ruby-on-rails - 我应该验证连接表中的外键吗?

转载 作者:行者123 更新时间:2023-12-04 05:44:09 25 4
gpt4 key购买 nike

考虑以下简化模型

class Article < ActiveRecord::Base
has_many :taggings
has_many :tags, through: :taggings
end

class Tag < ActiveRecord::Base
has_many :taggings
has_many :articles, through: :taggings
end

class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :article
validates :tag_id, :article_id, presence: true
end

我非常关注 tagging railscast除了我正在尝试为其编写测试。

标记模型中的验证,在 railscast 中没有使用,但我自己添加,这让我有些头疼。

如果我创建一篇新文章,我可以传递一个标签列表:

a = Article.new(title: "title", tag_list: "tag 1, tag 2")
a.valid?
#=> false
a.errors
# =>
@base=#<Article id: nil, title: "title">,
@messages={:taggings=>["is invalid", "is invalid"]}>

看来我的标记类的验证导致文章创建失败,因为 article_id 尚不可用。

人们通常在这里做什么?是否习惯将此类验证添加到连接表中,还是可以跳过?

最佳答案

我建议 Tagging 验证 :tag:article 的存在,而不是 ID。这有两个好处:

  1. 如果文章是新记录,标签仍然有效。

  2. 如果 article_id 无效(例如 -1),标记 将无效。

我不同意之前评论者提出的完全删除验证的建议,验证有助于避免创建不良记录。例如,带有文章但没有标签的 Tagging

关于ruby-on-rails - 我应该验证连接表中的外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13405953/

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