如何解决如何在Rails中建立协会以接受一个提案?
我正在Rails应用程序中开发一项功能,该功能允许users
创建projects
。然后,其他用户可以创建proposals
。最后,创建项目的用户可以接受其中一个提案作为接受的提案。
什么是允许创建项目的用户(经理)选择其中一个提案作为接受的提案的最佳方法?
模型设置如下:
用户模型
class User < ApplicationRecord
has_many :projects
has_many :proposals
end
项目模型
class Project < ApplicationRecord
belongs_to :manager,class_name: 'User',foreign_key: :user_id
has_many :proposals
end
投标模型
class Proposal < ApplicationRecord
belongs_to :project
belongs_to :user
end
首先,我想到了投标表中的“接受”布尔值,该布尔值允许用户将布尔值标记为true,以使投标“接受”。但这可能会导致问题,例如某些项目的建议书不只一个。这不是正确的方法。
那么,我应该如何建立一个接受模型,允许经理选择和取消选择一个提案作为唯一的“接受”提案?
解决方法
如果您要100%确保没有一个项目可以接受一个以上的建议,则可以设置其他关系。您还需要在投标中添加另一个关系
class Project < ApplicationRecord
belongs_to :accepted_proposal,class_name: 'Proposal',inverse_of: :accepted_for,optional: true
end
class Proposal < ApplicationRecord
has_one :accepted_for,class_name: 'Project',inverse_of: :accepted_proposal
end
您还可以仅验证已接受提案的唯一性,但我认为您不能为此提供数据库唯一索引
class Proposal < ApplicationRecord
validates :project_id,:uniqueness,if: Proc.new { |proposal| proposal.accepted }
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。