访问另一个控制器方法时未定义的方法错误

时间:2015-08-12 08:44:31

标签: ruby-on-rails ruby ruby-on-rails-4 activeadmin

我的产品控制器如下所示:

class ProductsController < InheritedResources::Base

public
    def product_params(p=params)
      p.require(:product).permit(:manufacturer, :part_no, :avatar)
    end
end

Item与产品有一对一的关系。在Item的控制器(activeadmin)中,我正在这样做:

@item.product = Product.create(ProductsController.product_params(params[:item]))

得到了这个错误:

undefined method `product_params' for ProductsController:Class

现在请帮我弄清楚我做错了什么。

2 个答案:

答案 0 :(得分:3)

product_params是类ProductsController

的实例对象方法

你在类product_params上调用ProductsController,并且这样不存在,product_params不是类方法,它是实例对象方法,它只能在{的实例对象上调用{1}}

答案 1 :(得分:1)

您的控制器实施product_params实例方法,而非静态类方法

我们有两种方法可以解决它:

  • products_params声明为静态类方法。
  • 致电produtcs_params当前实例。

第一个选项:

def self.product_params(p=params)
  p.require(:product).permit(:manufacturer, :part_no, :avatar)
end

第二个选项:

@item.product = Product.create(product_params(params[:item]))