【问题标题】:Why i'm getting ActiveRecord::UnknownAttributeError为什么我得到 ActiveRecord::UnknownAttributeError
【发布时间】:2016-01-17 01:40:53
【问题描述】:

我有一组对象,我通过ajax 发送到controller

我的ajax请求是这样的:

$.ajax({
  data: {
    product: [{'name': 'ahmad', 'price': 'tench', 'quantity': '12'}, {'name': 'gulshan', 'price': 'tench', 'quantity': '12'}]
  },
  url: '',
  type: "POST",
  dataType: "json",
  success: function ( data ) {
    console.log(data);
    // this.setState({ comments: data });
  }.bind(this)
});

控制器:

def create
  @product = Product.new(product_params)
  if @product.save
    render json: @product
  else
    render json: @product.errors, status: :unprocessable_entity
  end
end

private

def product_params
  params.fetch(:product).permit!
end

但是如果我使用create 方法,那么我也会遇到同样的错误。

我附上了 rails 日志中参数的屏幕截图。

我不明白为什么会出现此错误?

请帮忙。

【问题讨论】:

  • 你能把控制器的动作代码贴出来吗?
  • 我已经添加了控制器的代码。请检查
  • 您正在向控制器发送多个产品,但控制器不知道如何处理。您可以遍历 product_params 并一个一个地保存一个产品(您可以将其放入一个单独的类中)。
  • 顺便说一句,我们可以使用require 而不是fetch
  • 好的,但是create 方法可以采用哈希数组。对 ? stackoverflow.com/questions/26724347/… 但在这里我也遇到了同样的错误。

标签: ruby-on-rails ruby ajax activerecord hash


【解决方案1】:

您遇到的问题是,由于您传递的是 products 数组,因此 Rails 的强参数无法确定要传递的属性。

强参数期望:

params: {
   product: {
     "name" => "Test"
   }
}

这样,当您require(:product).permit(:name) 时,强参数模块将根据需要对哈希进行切片。因为您的哈希如下所示,所以它遇到了问题:

params: {
   product: [
     {"name" => "test"},
     {"name" => "test2"}
   ]
}

--

可能值得关注nested values

params.permit(:product => [{:name, :price, :quantity}])

【讨论】:

    【解决方案2】:

    所以我尝试了很多东西,但直到现在都没有做任何事情。

    product_arr = []
    product_params.each_pair { |key, product| product_arr << product }
    @products = Product.create(product_arr)
    

    each_pair 以键和值的形式返回响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      相关资源
      最近更新 更多