验证模型对相关模型的唯一性?

时间:2011-09-08 16:34:07

标签: ruby-on-rails ruby-on-rails-3

我有4个模特我正在使用:用户,列表,权限,邀请。

它们是如此相关:

用户有很多列表,列表有很多用户,加入表是Permission表。 用户可以与邀请共享列表。我的邀请模型如下:

Invitation(id: integer, list_id: integer, sender_id: integer, recipient_email: string, created_at: datetime, updated_at: datetime) 

我需要做的是,当用户创建邀请时,我想运行检查并确保收件人用户尚未拥有该列表的权限。

在我的邀请模型中,我目前有这个:

validates_uniqueness_of :list_id, :scope => :recipient_email, :message => "is already shared with this user"

这不起作用,因为我真的需要查看Permission模型,并在创建邀请时这样做:

validates_uniqueness_of :list_id, :scope => :user_id, :message => "is already shared with that user"

基本上,我想在发送邀请之前检查用户和列表之间是否已存在关系。如果有必要,我可以重做数据库逻辑,我只是​​坚持这一点。

2 个答案:

答案 0 :(得分:0)

对于我自己的情况,我似乎已经弄明白了。这是我的自定义方法/验证以及我在邀请模型中的样子:

validates :recipient_has_list

   def recipient_has_list
      user = User.find_by_email(self.recipient_email)

      if user.lists.include?(self.list)
        errors.add :list_id, "is already shared with that user"
      end
    end

答案 1 :(得分:0)

我认为custom validator在这种情况下会有所帮助。