【发布时间】:2016-09-27 10:53:50
【问题描述】:
我希望用户能够关闭项目而不是销毁它们。我想将关闭的原因存储在项目本身的单独表中。我正在尝试通过关联模型来做到这一点。
class Project < ApplicationRecord
belongs_to :project_status
has_one :project_close_reason, -> { where 'project_status_id = 10'}
end
class ProjectCloseReason < ApplicationRecord
belongs_to :projects
end
class ProjectStatus < ApplicationRecord
has_one :project
end
我只想要用户取消项目时的 ProjectCloseReason(这需要将项目中的 project_status_id 更改为“10”)。但是,当我现在创建一个新项目时,它一直给我一个错误,即项目关闭原因必须存在。有什么想法可以实现吗?上面的{ where... } 在这种情况下似乎不起作用?
更新
澄清我的关联,project_status 模型有一个预定义的状态列表:
(例如:1:待处理,2:分析中,3:工作中,...,10:已取消)。
foreign_key 位于 Project 模型中,因此每个项目都有一个 project_status_id -> 这个 foreign_key 列是我在 Projects 模型关联中的 { where... } 选项中所指的内容。
【问题讨论】:
-
您是否为项目设置了任何默认项目状态值?我想将默认值设置为 0 可以解决问题
-
谢谢我添加了一个默认值,但它仍然返回相同的错误
-
project.project_status_id 始终为 0?什么时候创建项目?
-
我添加了一个默认值,因为每个新产品都有一个默认的
project_status_id'1'。最初,我通过手动将 Project#create Action 中的值设置为“1”来完成此操作(这实现了我相信的相同结果)。它有效,但现在意识到这不是处理它的好方法,所以现在修复了,谢谢:)
标签: ruby-on-rails associations models