在创建新标记后,我没有在创建操作上使用id

时间:2016-10-17 14:48:04

标签: ruby-on-rails select2

我使用select2并希望创建新标记,然后保存它们。

我有@costselect2

的表单
<%= f.collection_select :product_ids, Product.all,:id, :name ,{include_hidden: false},{ multiple: true} %>

创建新产品我有js code

$(document).ready(function () {
$('#cost_product_ids').select2({
    tags: true,
    tokenSeparators: [",", " "],
    createProduct: function (product) {
        return {
            id: product.term,
            text: product.term,
            isNew: true
        };
    }
}).on("change", function (e) {
    var isNew = $(this).find('[data-select2-tag="true"]');
    if (isNew.length) {
        $.ajax({
            type: "POST",
            url: "/product_new",
            data: {product: isNew.val()}
        });

    }
});

});

和用于保存新产品的控制器方法

  def product_new
   product = Product.find_by(name:params[:product])
   Product.create(name:params[:product]) if !product
   render json: :ok
  end

cost create行动

   def create
    @cost = Cost.new(costs_params)
    if @cost.save
      flash[:notice] = t('added')
      if params[:add_more].present?
        redirect_back(fallback_location: root_path)
      else
        redirect_to @cost
      end
    else
      render action: 'edit'
    end
  end

   def costs_params
    params.require(:cost).permit(:day, :amount, :description, :source,:tag_list,:product_ids=>[])
  end

它工作正常,但是当我想用这个新创建的产品保存我的@cost记录时,我只收到了我的标签名称而没有id。

例如,我在db中有water=>id:1,beer=>id:2,and create new juice tag 的产品id:3

on create in有params "product_ids"=>["1", "2", "juice"]

如何解决?

1 个答案:

答案 0 :(得分:0)

您不应使用id:product.term, 但是xxx@serv1:~ > ls -l /etc/localtime -rw-r--r--. 1 root root 2309 Apr 8 2016 /etc/localtime xxx@serv1:~ > zdump /etc/sysconfig/clock /etc/sysconfig/clock Fri Jul 20 09:21:01 2018 xxx@serv2:~ > ls -l /etc/localtime -rw-r--r--. 1 root root 2309 Feb 13 2014 /etc/localtime xxx@serv2:~ > zdump /etc/sysconfig/clock /etc/sysconfig/clock Fri Jul 20 09:20:47 2018