期望错误数量的参数的Ruby方法

时间:2016-12-06 19:39:50

标签: ruby-on-rails ruby

我用Ruby编写的方法发现了一些奇怪的行为。当我用两个参数调用该方法时,控制台说它期待0..1,但是当我传递一个参数时,它说它期待两个。任何人都可以向我解释原因吗?

class Friendship < ApplicationRecord
    belongs_to :user
    belongs_to :friend, :class_name => "User"

    def self.request(user,friend)
        unless user == friend or Friendship.exists?(user,friend)
            transaction do
                create(:user => user, :friend => friend, :status => 'pending')
                create(:user => friend, :friend => user, :status => 'requested')
            end
        end
    end

    def self.accept(user,friend)
        transaction do
            accepted_at = Time.now
            accept_one_side(user,friend,accepted_at)
            accept_one_side(friend,user,accepted_at)
        end
    end

    def self.accept_one_side(user,friend,accepted_at)
        request = find_by_user_id_and_friend_id(user,friend)
        request.status = 'accepted'
        request.accepted_at = accepted_at
        request.save!
    end
end

这是我在控制台中调用的请求方法,如下所示:

Friendship.request(user1,user2)

其中user1user2是我数据库中的第一个和第二个用户。

1 个答案:

答案 0 :(得分:2)

引发错误的是Friendship.exists?(user,friend)exists?是一个只有一个参数的finder方法。

相反,你需要写这样的东西:

Friendship.exists?(user_id: user.id, friend_id: friend.id)