【问题标题】:How to send params from nested forms?如何从嵌套表单发送参数?
【发布时间】:2016-04-22 08:52:10
【问题描述】:

我正在从nested form 发出POST 请求,该请求用reactjs 编写,因此它正在向createproducts controller 方法发出ajax 请求。

反应代码:

我在getInitialState 中有一个像这样的空对象

getInitialState: function() {
 return {
   products: [{name: '', price: '', quantity: ''}],
   count: 1
 };
},

当我提交表单时,

handleSubmit: function(e) {
  e.preventDefault();
  var productsArray = this.state.products;
  $.ajax({
    data: {
      product: productsArray
    },
    url: '',
    type: "POST",
    dataType: "json",
    success: function ( data ) {
      console.log(data);
      // this.setState({ comments: data });
    }.bind(this)
  });
},

对象被填充,parameter 哈希变成这样

Parameters: {"product"=>{"0"=>{"name"=>"", "price"=>"", "quantity"=>""}}, "shop_id"=>"gulshop"}

所以我明白了

ActiveRecord::UnknownAttributeError (unknown attribute '0' for Product.):

我怎样才能得到这样的parameter 哈希:

Parameters: {"product"=>[{"name"=>"", "price"=>"", "quantity"=>""}], "shop_id"=>"gulshop"}

可以为它做些什么?

【问题讨论】:

    标签: ruby-on-rails arrays ruby reactjs


    【解决方案1】:

    您的原始错误“产品的未知属性 '0'。”是因为 Product 类没有属性“0”。我不确定“0”来自哪里,因为您尚未发布发出请求的反应代码。

    您可以使用 jQuery 的 .ajax 方法轻松地从您的组件发出请求。例如

    $.ajax({
      type: 'POST',
      url: '/your_url',
      data: {
        course: {
          name: 'Hello World',
          price: 120
        }
      }
    });
    

    然后,您的控制器中将有类似以下内容..

    class ProductController < ApplicationController
      def create
        @product = Product.create(product_params)
      end
    
      private
    
      def product_params
        params.require(:product).permit(:name, :price)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多