传递两个参数存在?在铁轨

时间:2014-05-25 17:09:19

标签: ruby-on-rails ruby validation activerecord

我有一个友谊模型,友谊是一个包含user_id一个friend_id和一个状态(这是一个字符串)的连接表。在友情的创建方法中,我需要进行一些验证,并检查该用户与friend之间是否已存在友谊,以便我执行此操作:

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

然而存在?调用create时抛出此错误:

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

我无法检查一个友情中是否存在userIDfriendID,无法正确执行验证。我的问题是,有没有更好的方法可以做到这一点,而不是使用存在?或者有没有办法将两个参数传递给存在?在rails中的方法。

感谢您提供任何帮助或建议。

2 个答案:

答案 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