gpt4 book ai didi

ruby-on-rails - 模块 : wrong number of args, 类/实例方法的模型代码?

转载 作者:数据小太阳 更新时间:2023-10-29 07:53:48 25 4
gpt4 key购买 nike

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

原始模型方法:

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

原始模型方法:

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

但是现在我得到了

wrong number of arguments (2 for 0)

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

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

编辑

book_royalty 在 Royaltystatement 模型中调用。

书.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。然后,在包含该模块后的几行中,您使用定义了两个方法的类宏 attr_accessor

def book_royalty
@book_royalty
end

def book_royalty= val
@book_royalty = val
end

这有效地从模块覆盖您的book_royalty。现在它不接受任何参数。因此错误

wrong number of arguments (2 for 0)

当试图执行行时

book.book_royalty("enddate", basis)

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

关于ruby-on-rails - 模块 : wrong number of args, 类/实例方法的模型代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10057556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com