关联的has_one和belongs_to模型使用“where”

时间:2016-09-27 10:53:51

标签: ruby-on-rails associations models

我希望用户能够关闭项目而不是销毁它们。我想将密切的原因存储在项目本身的单独表中。我试图通过相关模型来做到这一点。

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... }选项中引用的。

1 个答案:

答案 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