我希望用户能够关闭项目而不是销毁它们。我想将密切的原因存储在项目本身的单独表中。我试图通过相关模型来做到这一点。
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中的project_status_id更改为'10')。但是,当我现在创建一个新项目时,它会一直给我一个项目关闭原因必须存在的错误。有任何想法如何实现这一目标?上述{ where... }
在这种情况下似乎不起作用?
更新
澄清我的关联,project_status
模型有一个预定义的状态列表:
(例如:1:待定,2:分析,3:工作,......,10:已取消)。
foreign_key位于Project模型中,因此每个项目都有一个project_status_id - &gt;这个foreign_key列是我在Projects模型关联的{ where... }
选项中引用的。
答案 0 :(得分:0)
您需要重新考虑模型之间的关联。你可以试试这个:
<强> project.rb 强>
class Project < ApplicationRecord
has_one :project_status
has_one :project_close_reason, through: :project_status
end
<强> project_status.rb 强>
class ProjectStatus < ApplicationRecord
belongs_to :project
has_one :project_close_reason, -> { where status: 10 } #assume 'status' is an attribute where you store you project status such as 10
end
<强> project_close_reason.rb 强>
class ProjectCloseReason < ApplicationRecord
belongs_to :project_status
end