为什么我得到ActiveRecord :: UnknownAttributeError

时间:2016-01-17 01:40:53

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

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

我的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日志中附上参数的屏幕截图。

enter image description here

我不明白为什么我会收到此错误?

请帮忙。

2 个答案:

答案 0 :(得分:1)

你遇到的问题是,由于你传递了一个products数组,你的Rails强大的参数无法确定要传递的属性。

强对手期望:

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

这样,当你require(:product).permit(:name)时,强params模块会根据需要切片哈希。因为你的哈希看起来如下,所以它遇到了一个问题:

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

-

可能值得关注nested values

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

答案 1 :(得分:0)

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

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

each_pair以键和值返回响应。