我使用select2
并希望创建新标记,然后保存它们。
我有@cost
和select2
此
<%= 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
1}}
id:3
on create in有params "product_ids"=>["1", "2", "juice"]
如何解决?
答案 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