2014-05-25 2 views
0

J'ai un modèle d'amitiés, les amitiés est une table de jointure qui contient un user_id un friend_id et un statut (qui est une chaîne). Dans la méthode créer pour l'amitié que je dois faire une validation et vérifier qu'une amitié n'existe pas entre cet utilisateur et que friend pour ce faire, je l'ai appelé:en passant deux paramètres à exister? dans les rails

unless userID == friendID or Friendship.exists?(userID, friendID) 

existe cependant? jette cette erreur lorsque créer est appelé:

ArgumentError (wrong number of arguments (2 for 0..1)): 

Je ne peux pas faire correctement la validation sans vérifier la userID et friendID existent dans une amitié. Ma question est la suivante: y a-t-il une meilleure façon de faire cela? ou est-ce que je peux passer deux paramètres à l'existant? méthode dans les rails.

Merci pour toute aide ou conseil.

Répondre

1
@userid = any_user_id 
@friendid = any_friend_id 
(@userid == @friendid || Friendship.where(user_id: @userid,friend_id: @friendid).present?) ? true : false 

OU si vous souhaitez utiliser exists?:

(@userid == @friendid || Friendship.exists?(user_id: @userid,friend_id: @friendid)) ? true : false 

cela fera exactement ce dont vous avez besoin.

+1

Le '? true: false' serait superflue ici? 'exists?' retourne 'true' ou' false' déjà. Pareil avec 'present?'. – pdobb

+0

mais vous avez '||' avec une autre condition peut-être celle-ci retournera false et aussi 'Friendship.exists? (user_id: @ userid, friend_id: @friendid)' retournera false ceci n'est pas une condition. – matanco

0

Pour ce faire, vous pouvez utiliser 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 
Questions connexes