2016-11-14 44 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

我发现它称为另一种方法,通过行注释掉线,直到我已经达到了麻烦线。

相关问题