类似于Stackoverflow上的工作方式,我正在设置一个用户可以发布赏金的应用程序,其他用户可以自愿完成它。
唯一的区别是用户选择执行赏金的人。因此,例如,如果创建赏金并且三个人自愿完成它,则创建者可以选择1 / 3,2 / 3或3/3。
当创建赏金时,当用户选择正在进行时,打开:正在进行中,并在完成时完成 >
对于初学者,我如何设置我的关联,其中用户是赏金的唯一所有者,但其他用户属于赏金,但是volunteers
如果选择成为participants
}。这应该作为自我指涉协会吗?似乎设置两个新模型可能/可能不是多余的。
class User < ActiveRecord::Base
has_many :bounties
end
class Bounty < ActiveRecord::Base
belongs_to :user
end
至于赏金的状态,我应该在赏金表中设置三个不同的基于布尔的列吗?
:open, :in_progess, :complete
答案 0 :(得分:3)
我会这样做:未经测试,因此您可能需要调整选项。
User
has_many :owned_bounties, :class_name => "Bounty", :as => :owner
has_many :bounty_volunteers, :as => :volunteer
has_many :volunteered_bounties, :through => :bounty_volunteers
Bounty
#owner_id, status(can be "open", "in_progress" or "complete")
belongs_to :owner, :class_name => "User"
has_many :bounty_volunteers
has_many :volunteers, :through => :bounty_volunteers, :source => :volunteer
has_many :participants, :through => :bounty_volunteers, :source => :volunteer, :conditions => ["bounty_volunteers.selected = ?", true]
#join table class
BountyVolunteer
#bounty_id, volunteer_id, selected(bool)
belongs_to :bounty
belongs_to :volunteer, :class_name => "User"
因此,当您将用户添加为志愿者时,您将创建BountyVolunteer记录。如果他们升级为参与者,则您正在编辑现有的BountyVolunteer记录。