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
在我的 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