使用 "where" 关联 has_one 和 belongs_to 模型
Associated has_one and belongs_to models using "where"
我希望用户能够关闭项目而不是销毁它们。我想将关闭原因存储在项目本身的单独 table 中。我正在尝试通过关联模型来做到这一点。
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_status_id -> 这个 foreign_key 列就是我在 [=14] 中提到的=] 项目模型关联中的选项。
您需要重新考虑模型之间的关联。你可以试试这个:
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
我希望用户能够关闭项目而不是销毁它们。我想将关闭原因存储在项目本身的单独 table 中。我正在尝试通过关联模型来做到这一点。
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_status_id -> 这个 foreign_key 列就是我在 [=14] 中提到的=] 项目模型关联中的选项。
您需要重新考虑模型之间的关联。你可以试试这个:
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