Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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_Validation_Model_Associations - Fatal编程技术网

Ruby on rails Rails仅在加载时验证关联

Ruby on rails Rails仅在加载时验证关联,ruby-on-rails,validation,model,associations,Ruby On Rails,Validation,Model,Associations,我有一个有很多参与者的活动模型,我想确保在更新活动及其参与者时始终存在一个参与者。在我的活动模型中,我使用了以下方法: def must_have_participant if self.participants.size == 0 || self.participants.size == self.participants.to_ary.find_all{ |p| p.marked_for_destruction? }.count self.errors[:base] <&l

我有一个有很多参与者的活动模型,我想确保在更新活动及其参与者时始终存在一个参与者。在我的活动模型中,我使用了以下方法:

def must_have_participant
  if self.participants.size == 0 || self.participants.size == self.participants.to_ary.find_all{ |p| p.marked_for_destruction? }.count
    self.errors[:base] << I18n.t(:msg_activity_must_have_participant)
  end
end
def必须有参与者
如果self.participants.size==0 | | self.participants.size==self.participants.to_ary.find_all{| p | p.marked_for_destruction?}.count

self.errors[:base]我在最近创建的验证中做了类似的操作。我搜索了原始记录,并将原始值与新值进行了比较。不保证我的代码适用于您,但以下是我的应用程序代码:

    orig_rec = self.find(id)
    if participant_ids.size != orig_rec.participant_ids.size
注意,我检查了参与者ID的大小,而不是获取所有参与者记录并检查其大小。这应该更有效率


我不知道ruby中是否有某种内置函数可以实现这一点,我很想看看更具体的rails用户会有什么建议。

为了参考,我对该方法进行了如下修改:

def must_have_participant
  if self.new_record? || self.association(:participants).loaded?
    if self.participants.size == 0 || self.participants.size == self.participants.select{ |p| p.marked_for_destruction? }.size
      self.errors[:base] << I18n.t(:msg_must_have_participant)
    end
  end
end
def必须有参与者
如果self.new|u记录self.association(:参与者)。是否加载?
如果self.participants.size==0 | | self.participants.size==self.participants.select{| p | p.marked_for|u destruction?}.size
self.errors[:base]
def must_have_participant
  if self.new_record? || self.association(:participants).loaded?
    if self.participants.size == 0 || self.participants.size == self.participants.select{ |p| p.marked_for_destruction? }.size
      self.errors[:base] << I18n.t(:msg_must_have_participant)
    end
  end
end