繁体   English   中英

Model 模块代码:参数、类/实例方法的数量错误?

[英]Model code to module: wrong number of args, class/ instance method?

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

原来的model方法:

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

原来的model方法:

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

但现在我越来越

arguments 的号码错误(2 为 0)

如果我将 book.rb model 中的方法设为 class 方法,即如果我将方法名称self.book_royalty(args) ,这也是我得到的错误。

我是否无意中将方法移到了模块 class 方法中? 我在 book.rb 中使用include ,而不是extend 如何让父 model 成功包含模块的方法?

编辑

book_royalty在 Royaltystatement model 中被调用。

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

解释:

您的模块定义了一个方法book_royalty ,它采用两个 arguments。然后,在包含该模块后的几行中,您使用 class 宏attr_accessor ,它定义了两个方法,

def book_royalty
  @book_royalty
end

def book_royalty= val
  @book_royalty = val
end

这有效地覆盖了模块中的book_royalty 现在它不接受 arguments。因此出现错误

arguments 的号码错误(2 为 0)

尝试执行行时

book.book_royalty("enddate", basis)

不需要attr_accessor或其他任何东西来使用包含模块中的方法。 它自动可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM