Lor*_*lor 0 activerecord ruby-on-rails ruby-on-rails-5
我正在使用Rails 5.0.0.1。下面的代码段是模型,
class Note < ApplicationRecord
belongs_to :language
end
class Language < ApplicationRecord
has_many :notes
end
Run Code Online (Sandbox Code Playgroud)
当我尝试在Rails控制台中创建笔记时,
Note.create!(content: '1234')
Run Code Online (Sandbox Code Playgroud)
它将产生以下错误,
ActiveRecord::RecordInvalid: Validation failed: Language must exist
Run Code Online (Sandbox Code Playgroud)
在Rails 5中,每当我们定义一个Emirates_to关联时,默认情况下都需要显示关联记录
在Rails 4中
required在Rails 4中默认用于belongs_to关联false。
class Note < ApplicationRecord
belongs_to :language, required: false
end
Run Code Online (Sandbox Code Playgroud)
在Rails 5中
要使其行为像在Rails 4中一样
class Note < ApplicationRecord
belongs_to :language, optional: true
end
Run Code Online (Sandbox Code Playgroud)
在Rails 5中,不赞成使用required选项,belongs_to而推荐使用optional。(请参见Rails Github PR “ belongs_to默认情况下需要”)
让optional:true跨整个应用程序
Rails.application.config.active_record.belongs_to_required_by_default = false
Run Code Online (Sandbox Code Playgroud)
您还可以阅读“ Rails 5使belongs_to关联默认为必需”以获取更多详细信息。