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

undefined method error while accessing another controllers method

我的产品控制器是这样的:

class ProductsController < InheritedResources::Base

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

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

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

并收到此错误:

undefined method `product_params' for ProductsController:Class

现在请帮我找出我做错了什么。

product_params 是 class ProductsController

的实例对象方法

您在 class ProductsController 上调用 product_params,而这样的不存在,product_params 不是 class 方法,它是实例对象方法,它只能在 ProductsController

的实例对象上调用

你的控制器实现 product_params 作为 实例方法 ,不像 static class 方法 .

我们有两种修复方法:

  • products_params 声明为静态 class 方法。
  • 调用 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]))