我用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)
其中user1
和user2
是我数据库中的第一个和第二个用户。
答案 0 :(得分:2)
引发错误的是Friendship.exists?(user,friend)
。 exists?
是一个只有一个参数的finder方法。
相反,你需要写这样的东西:
Friendship.exists?(user_id: user.id, friend_id: friend.id)