模型功能的验证和关系责任

时间:2018-02-09 14:05:09

标签: ruby-on-rails validation activerecord

 class Project < ApplicationRecord
   has_one :description
 end

 class Description < ApplicationRecord
   belongs_to :project
 end
  • 参考文献介绍了迁移/模型。

此时,如果没有附加项目,我无法在DB中保存描述。 但我可以创建一个没有描述的项目。

在我的情况下,如果项目没有描述,我想禁止创建项目。

我认为有两种方法可以做到:

第一个是在Description类中添加“has_one:project”,在Project中添加“belongs_to:description” 第二个是在Project中进行验证,例如“validates:description,presence:true”

我不确定我应该选择什么。第一个选项对我来说似乎很混乱,我已经在模型之间建立了关系,所以如果我为相同的两个模型添加一个,我觉得它太多了。

我不确定它是否是验证责任(如果没有描述则禁止项目创建),或者它是否是数据库/关系责任。因为正如我所说,只是使用ActiveRecord我无法在没有项目的情况下创建描述,是不是有点像验证?

无论如何,我猜我的第二选择“验证”是错误的。

1 个答案:

答案 0 :(得分:0)

根据Rails文档,这应该需要Description来创建Project

class Project < ApplicationRecord
   has_one :description, required: true
 end

可以在页面下方的2/3处找到它。搜索required

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html