使用Nil关联创建对象

时间:2018-02-23 16:54:58

标签: ruby-on-rails

我正在尝试使用以下属性在我的应用中创建一个简单的to_do模型:title:string,completed:boolean,completed_at:datetime,user_id:integer,project_id:integer。

class ToDo < ApplicationRecord
  belongs_to :user
  belongs_to :project
end

在创建页面上有一个表单,允许您提交新的to_do,并允许您从项目的下拉列表中选择要将其分配到的项目。这非常有效。

我还希望能够允许用户创建未分配给项目的to_dos,因此我将include_blank: true添加到新to_do表单中的项目collection_select中,该表单将project_id提交到后端

当我使用空白project_id提交新的to_do时,我收到以下错误:

“项目必须存在”

如何在ToDo模型上允许nil project_id?

1 个答案:

答案 0 :(得分:2)

这是Rails 5中的新行为,如this blog post中所述。在Rails 4及更早版本中,如果要确保存在belongs_to关联,则必须使用验证明确说明。在Rails 5中,验证是自动的,除非您在模型中设置optional: true标志。

您需要指定:project关联是可选的,如下所示:

class ToDo < ApplicationRecord
  belongs_to :user
  belongs_to :project, optional: true
end