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
內部調用的實例和方法變量的不同組合,但沒有真正改變。
我迷失在這裏。
更深的堆棧跟蹤請這似乎與你如何建立關係有關,而與你所顯示的代碼無關。 – engineersmnky
只是要說清楚:ArgumentError發生在users_meeting_requirements_for內部,但方法調用本身不是問題。這似乎是一個ActiveRecord關係問題,並且您不會顯示任何與Rails相關的信息。 –
這就是調用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