2016-12-06 42 views
0

我發現了一些我在Ruby中編寫的方法的奇怪行爲。當我用兩個參數調用該方法時,控制檯說它期望0..1,但是當我傳遞一個參數時,它表示它期待着兩個參數。任何人都可以向我解釋爲什麼?Ruby方法期望錯誤的參數個數

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都在我的數據庫中的第一和第二用戶。

+3

添加更多的相關信息的問題......你到底是什麼調用的方法,你怎麼那麼控制檯上調用,什麼是產出? –

+1

我有一種感覺,第一個錯誤是在你的方法內部的一個方法,然後第二個錯誤是在調用你的方法時。 – engineersmnky

+1

當你打電話*什麼*方法?你打電話過得怎麼樣?什麼是確切的堆棧跟蹤? –

回答

2

它是Friendship.exists?(user,friend)引起錯誤。 exists?是一種只有一個參數的查找方法。

相反,你需要寫這樣的事:

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

非常感謝,解決了這個問題。 – antonyCas

相關問題