我们应该在 Rails 中通过模型添加验证吗?

问题描述 投票:0回答:1
class Product < ActiveRecord::Base
  has_many :collaborators
  has_many :users, :through => :collaborators
end

class User < ActiveRecord::Base
  has_many :collaborators
  has_many :products, :through => :collaborators
end

class Collaborator < ActiveRecord::Base
  belongs_to :product
  belongs_to :user
  validates :product_id, presence: true
  validates :user_id, presence: true
 end

我在模型中的验证部分遇到问题。当我从用户模型创建新记录时

User.create!(name: "user name", product_ids: [1, 2, 3])
=> 它返回错误“协作者有效”。 这里的问题是
validates :user_id, presence: true
阻止了这个。如果我再次注释此行,它会再次正常工作,并且在 Collaborator 表中创建的新记录仍然具有 user_id 和 Product_id

我正在使用 Rails 6.1

我们应该在 Rails 中通过模型添加验证吗?

ruby-on-rails ruby has-many-through has-many
1个回答
0
投票

在 Rails >= 5

belongs_to
符号中自动添加验证。参见6.1来源

如果验证在您的情况下不起作用,您可能会使用

Rails.application.config.active_record.belongs_to_required_by_default

尝试 grep 一下

git grep belongs_to -- config

我认为使用默认配置更好。如果您确实不需要验证用户是否存在 - 只需添加

optional: true
选项

belongs_to :user, optional: true

这取决于你的业务逻辑,互联网上不太可能有人知道:)

无论如何,如果您验证应用程序层中某些列的存在,建议向数据库层添加

NOT NULL
约束

BTW 从 Rails 5 开始使用了中间抽象模型

ApplicationRecord

© www.soinside.com 2019 - 2024. All rights reserved.