Rails 5 ArgumentError(参数数量错误(1 代表 0)

Rails 5 ArgumentError (wrong number of arguments (1 for 0)

在我的 Rails 5 应用程序中,我正在使用 Public_Activity gem 并尝试记录 activity,但 运行 出现错误:ArgumentError (wrong number of arguments (1 for 0).

我试图在我的控制器中记录 activity,但我遇到了麻烦,因为我不知道如何指定我的模型实例 (CanvasProduct)。所以我尝试使用我在 documentation.

中找到的内容在模型中创建条目

我的控制器(创建一个 CanvasProduct):

def add_product
  product = Product.friendly.find(params[:product_id])        
  if @canvas.canvas_products.create product: product
    render nothing: true, status: :created
  else
    render nothing: true, status: :bad_request
  end
end

我的模型

class CanvasProduct < ActiveRecord::Base
  belongs_to :canvas
  belongs_to :product

  include PublicActivity::Common

  after_create :create_activity

  def create_activity
    @cp = self
    @cp.create_activity :create, recipient: @cp.canvas
  end  
end

我认为问题出在您的 after_create 回调方法名称上。您已使用与 gem 的方法名称相同的名称来定义它。因此它只是覆盖了 gem 的内置方法。所以当你打电话时:

@cp.create_activity :create, recipient: @cp.canvas

您实际上是在调用模型中定义的实例方法 create_activity,而不是 gem 提供的方法。请注意,您定义的方法不接受任何参数,但在上面的行中您实际上是在传递参数。

那么您能否尝试将 after_create 回调方法名称重命名为其他名称?喜欢:

after_create :create_new_activity

def create_new_activity
    @cp = self
    @cp.create_activity :create, recipient: @cp.canvas
end