Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有没有办法在rails中实现“每个都有一个”关系?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 有没有办法在rails中实现“每个都有一个”关系?

Ruby on rails 有没有办法在rails中实现“每个都有一个”关系?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,假设我有三个包含用户、角色和事件的模型。每个用户可以扮演多个角色,例如吉他手、贝司手等,每个角色可以有一个或多个用户,例如Ted可以扮演吉他手或贝司手,他们可以完成任务 我正在为教堂乐队创建一个rota应用程序,这意味着每个活动都有乐队中每个角色的一个,每个活动中每个角色都有一个用户。我想知道有没有办法在模型中强制执行这种关系,或者我是否必须在应用程序的其他地方执行这种操作。提前谢谢你的帮助 事件应通过EventParticipation拥有多个用户,EventParticipation应 be

假设我有三个包含用户、角色和事件的模型。每个用户可以扮演多个角色,例如吉他手、贝司手等,每个角色可以有一个或多个用户,例如Ted可以扮演吉他手或贝司手,他们可以完成任务


我正在为教堂乐队创建一个rota应用程序,这意味着每个活动都有乐队中每个角色的一个,每个活动中每个角色都有一个用户。我想知道有没有办法在模型中强制执行这种关系,或者我是否必须在应用程序的其他地方执行这种操作。提前谢谢你的帮助

事件应通过EventParticipation拥有多个用户,EventParticipation应

belongs_to :user
belongs_to :event
如果需要,为用户id添加一些,添加角色id并执行作用域唯一性验证。

我会在模型中使用。这里有一些未经测试的代码

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

有些乐队有两个吉他手。是的,但是这个应用程序是特定于一个乐队的,每个乐队总是有一个RoLead会考虑把逻辑作为DAL的业务规则,而不是作为ORM的模型规则。