在Rails中设置用户和赏金之间的关联

时间:2015-06-17 16:29:03

标签: ruby-on-rails ruby activerecord associations

类似于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

1 个答案:

答案 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记录。