Ruby on rails 模块的模型代码:参数数量错误,类/实例方法?

Ruby on rails 模块的模型代码:参数数量错误,类/实例方法?,ruby-on-rails,ruby,module,Ruby On Rails,Ruby,Module,我正在尝试将一些模型代码移动到模块中 原始模型方法: class Book < ActiveRecord::Base def book_royalty(period='enddate', basis="Net receipts") #stuff end end 我正在尝试将一些模型代码移动到模块中 原始模型方法: class Book < ActiveRecord::Base def book_royalty(period='enddate', basis="N

我正在尝试将一些模型代码移动到模块中

原始模型方法:

class Book < ActiveRecord::Base
  def book_royalty(period='enddate', basis="Net receipts")
    #stuff
  end
end
我正在尝试将一些模型代码移动到模块中

原始模型方法:

class Book < ActiveRecord::Base
  def book_royalty(period='enddate', basis="Net receipts")
    #stuff
  end
end
并将该方法移动到一个模块:

module Calculation
  def book_royalty(period='enddate', basis="Net receipts")
    #stuff
  end
end
但现在我开始

参数数目错误(2代表0)

如果我将book.rb模型中的方法设置为类方法,也就是说,如果我将方法名称设置为self.book\u royalty(args),那么我也会遇到这个错误

我是否无意中将方法移动到模块类方法?我在book.rb中使用的是
include
,而不是
extend
。如何使父模型成功地包含模块的方法

编辑
book\u版税
在版税报表模型中调用

book.rb:

attr_accessor :book_royalty
royaltystatement.rb:

def initialize_arrays
  @royalty  = []
  ...
end

def sum_at_book_level(contract)
  contract.books.where(:exclude_from_royalty_calc => false).each do |book| 
    book.book_royalty("enddate", basis)
    @royalty.push(book.book_royalty("enddate", basis))
    # etc
end
说明:

您的模块定义了一个接受两个参数的方法。然后,在包含该模块后的几行中,您使用定义了两种方法的类macro
attr\u accessor

def book_royalty
  @book_royalty
end

def book_royalty= val
  @book_royalty = val
end
这将有效地覆盖模块中的
图书版权费
。现在它不接受任何论据。因此出现了错误

参数数目错误(2代表0)

当试图执行命令行时

book.book_royalty("enddate", basis)

您不需要
属性访问器
或其他任何东西来使用包含模块中的方法。它将自动可用。

您如何调用
book\u royalty
?编辑以保留格式…Genius,ta。你能解释一下吗?大概,添加attr_访问器会使该方法自动成为类方法?