我正在尝试将一些模型代码移动到模块中。
原始模型方法:
我正在尝试将一些模型代码移动到模块中。
原始模型方法:
class Book < ActiveRecord::Base
def book_royalty(period='enddate', basis="Net receipts")
#stuff
end
end
所以我添加
include Calculation
并将方法移动到模块:
module Calculation
def book_royalty(period='enddate', basis="Net receipts")
#stuff
end
end
但现在我正在
错误的参数数量(2为0)
如果我在book.rb模型中创建一个类方法,即如果我创建方法名self.book_royalty(args)
,那么这也是我得到的错误。
我无意中将方法转移到模块类方法?我在book.rb中使用include
,而不是extend
。如何让父模型成功包含模块的方法?
book_royalty
。
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
答案 0 :(得分:5)
说明:
您的模块定义了一个带有两个参数的方法book_royalty
。然后,在包含该模块后的几行中,您使用了定义两个方法的类宏attr_accessor
,
def book_royalty
@book_royalty
end
def book_royalty= val
@book_royalty = val
end
这有效覆盖您的book_royalty
模块。现在它不接受任何参数。因此错误
错误的参数数量(2为0)
尝试执行行
时book.book_royalty("enddate", basis)
您不需要 attr_accessor
或其他任何内容才能使用所包含模块中的方法。它会自动生效。