Dmi*_*nko 9 ruby-on-rails mongoid
A有两个mongoid模型,它们之间有一个简单的has_many/belongs_to关系:
class Lot
include Mongoid::Document
has_many :journal_items
end
class JournalItem
include Mongoid::Document
belongs_to :lot
end
Run Code Online (Sandbox Code Playgroud)
问题是我无法创建一个JournalItem没有a Lot,因为似乎mongoid在JournalItem.lot_id默认情况下添加了非null验证.
JournalItem.create!
# raises validation error "Lot can't be blank"
Run Code Online (Sandbox Code Playgroud)
我该如何禁用它?
我使用带有Rails 5的mongoid master.
Dmi*_*nko 27
好吧,我已经明白了 - mongoid协会有optional选择权,似乎没有很好地记录.
所以它应该是:
class JournalItem
include Mongoid::Document
belongs_to :lot, optional: true
end
Run Code Online (Sandbox Code Playgroud)
小智 8
在Rails 5中,belongs_to默认为必需:true(参见rails/rails/pull/18937)
所以现在需要:true已被弃用:
belongs_to :company, required: true # deprecated => `required: true`
Run Code Online (Sandbox Code Playgroud)
要在基于ActiveRecord的应用程序上禁用此选项,您应该创建一个初始化程序,以显式配置应用程序的新行为:
# config/initializers/active_record_belongs_to_required_by_default.rb
Rails.application.config.active_record.belongs_to_required_by_default = true
Run Code Online (Sandbox Code Playgroud)
对于不需要的每个belongs_to关系,只需添加optional:true.
belongs_to :company, optional: true
Run Code Online (Sandbox Code Playgroud)
对于Mongoid +6.0,您需要在Mongoid初始化程序中添加此选项:
# config/initializers/mongoid.rb
Mongoid::Config.belongs_to_required_by_default = false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3420 次 |
| 最近记录: |