2017-02-20 2 views
0

В моем Rails 5 приложений, я с помощью Public_Activity gem и я пытаюсь записать активность, но впадающая ошибку: ArgumentError (wrong number of arguments (1 for 0).Rails 5 ArgumentError (неверное число аргументов (1 для 0)

I попытался записать активность в моем контроллере, но у меня были проблемы, потому что я не мог понять, как указать экземпляр модели (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 
+0

try, '@cp = PublicActivity :: Common' – Sravan

ответ

0

Я думаю, что проблема с вашим after_create именем метода обратного вызова. Вы определили его с тем же именем, что и имя метода gem. Следовательно, он просто переопределяет встроенный метод драгоценного камня. Так что, когда вы звоните:

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

Вы фактически призывающий метод экземпляра create_activity, определенный в модели вместо способа, предложенного в камне. И обратите внимание, что ваш определенный метод не принимает аргументов, но в приведенной выше строке вы фактически передаете аргументы.

Так что вы можете просто переименовать имя метода обратного вызова after_create в другое? Нравится:

after_create :create_new_activity 

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

Wow! Вот и все, спасибо! Я никогда бы этого не догадался. – yellowreign

Смежные вопросы