我有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"
基本上,我想在发送邀请之前检查用户和列表之间是否已存在关系。如果有必要,我可以重做数据库逻辑,我只是坚持这一点。
答案 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在这种情况下会有所帮助。