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 中通过模型添加验证吗?
在 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