我有一个友谊模型,友谊是一个包含user_id
一个friend_id
和一个状态(这是一个字符串)的连接表。在友情的创建方法中,我需要进行一些验证,并检查该用户与friend
之间是否已存在友谊,以便我执行此操作:
unless userID == friendID or Friendship.exists?(userID, friendID)
然而存在?调用create时抛出此错误:
ArgumentError (wrong number of arguments (2 for 0..1)):
我无法检查一个友情中是否存在userID
和friendID
,无法正确执行验证。我的问题是,有没有更好的方法可以做到这一点,而不是使用存在?或者有没有办法将两个参数传递给存在?在rails中的方法。
感谢您提供任何帮助或建议。
答案 0 :(得分:1)
@userid = any_user_id
@friendid = any_friend_id
(@userid == @friendid || Friendship.where(user_id: @userid,friend_id: @friendid).present?) ? true : false
如果您想使用exists?
:
(@userid == @friendid || Friendship.exists?(user_id: @userid,friend_id: @friendid)) ? true : false
这将完全符合您的需要。
答案 1 :(得分:0)
您可以使用rails validation methods执行此操作。
class Friendship < ActiveRecord::Base
# ensure that user/friend combo does not already exist
validates :user, uniqueness: { scope: friend }
# ensure that friend != user
validate :friend_is_not_user
# other Friendship model code
def friend_is_not_user
if self.friend == self.user
errors.add(:user, 'cannot be friends with his or her self.')
end
end
end