有没有办法在rails中实现“拥有一个”关系?

时间:2012-06-30 18:54:56

标签: ruby-on-rails ruby activerecord

假设我有三个包含用户,角色和事件的模型。每个用户可以有许多角色(例如吉他手,贝斯手等),并且每个角色可以有一个或多个用户(例如Ted可以充当吉他手或贝斯手),他们可以实现它。

我正在为教堂乐队创建一个rota应用程序,因此这意味着每个事件在乐队中都有一个每个角色,一个用户可以在每个事件中填充每个角色。我想知道在模型中有什么方法可以强制执行这种关系,或者我是否必须在应用程序的其他地方执行此操作。感谢您提前提供任何帮助!

2 个答案:

答案 0 :(得分:0)

事件应该有很多用户通过EventParticipation和EventParticipation

belongs_to :user
belongs_to :event

为user_id添加一些uniqueness validation,添加一个role_id并根据需要进行范围唯一性验证。

答案 1 :(得分:0)

我会在模型中使用custom validation methods执行此操作。这是一些未经测试的代码,但类似

class ChurchEvent < ActiveRecord::Base
  validate :has_one_role_each

  def has_one_role_each
    errors.add(:base, "only one of each role allowed") if duplicate_roles?
  end

  private

  def duplicate_roles?
    # assuming band_roles is array of roles for this event
    band_roles.uniq.count != band_roles.count
  end
end

为用户提供类似的东西。