2016-11-14 40 views
1

我有一個類細分和我打電話segment.build紅寶石 - 對於引發ArgumentError無法找到原因:錯誤的參數數目(0給出,預計2..3)

class Segment < ActiveRecord::Base 
    has_and_belongs_to_many :users 

    validates :filters, presence: true 

    def build 
    segment_builder = BuildSegment.new(self) 
    segment_builder.call 
    end 
end 

這是怎麼BuildSegment外觀:

class BuildSegment 

    def initialize(segment) 
    @segment = segment 
    end 

    def call 
    users_to_add = users_meeting_requirements_for(@segment) 

    add_users(@segment, users_to_add) 
    remove_users(@segment, users_to_add) 
    end 

    private 

    def remove_users(segment, users_to_add) 
    segment.users.where.not(id: users_to_add.uniq).delete_all 
    end 

    def add_users(segment, users_to_add) 
    segment.users << users_to_add.uniq 
    end 

    def users_meeting_requirements_for(segment) 
    users = Array.new 

    segment.filters.each do |filter| 
     users << users_passing_filter(filter) 
    end 

    users.flatten.uniq 
    end 

這條線:users_to_add = users_meeting_requirements_for(@segment) 給我:

ArgumentError: wrong number of arguments (given 0, expected 2..3) 
from /Users/patryk/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.4/lib/active_record/relation.rb:23:in `initialize' 

爲什麼? users_meeting_requirements_for只需要我提供的一個參數。我嘗試了從users_meeting_requirements_for內部調用的實例和方法變量的不同組合,但沒有真正改變。

我迷失在這裏。

+1

更深的堆棧跟蹤請這似乎與你如何建立關係有關,而與你所顯示的代碼無關。 – engineersmnky

+0

只是要說清楚:ArgumentError發生在users_meeting_requirements_for內部,但方法調用本身不是問題。這似乎是一個ActiveRecord關係問題,並且您不會顯示任何與Rails相關的信息。 –

+0

這就是調用Segment.last.build後在控制檯中返回的所有內容: '段加載(0.6ms)SELECT段「*」FROM「段」ORDER BY「段」。「id」DESC LIMIT 1 參數錯誤:的參數(給定爲0,預期2..3) 從/Users/patryk/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.4/lib/active_record/relation.rb:23:in'初始化」 段是一個模型,而BuildSegment是在應用程序/服務/ build_segment.rb 我更新的原始代碼 – Patryk

回答

0

問題隱藏得比我以前想象的更深。參數錯誤是由內users_meeting_requirements_for

我發現它稱爲另一種方法,通過行註釋掉線,直到我已經達到了麻煩線。

相關問題