Ruby on rails 从Rails参数中排除项

Ruby on rails 从Rails参数中排除项,ruby-on-rails,Ruby On Rails,更新后,解决方案是: 参数['place']['menu\u items\u attributes']。拒绝!{| uv| v['id']是否为空?} 问题-我想从参数中排除某些项,但不知道如何排除 背景。一个地方有很多菜单项。在编辑页面上,您可以使用javascript添加新项目:我克隆第一个现有节点并用随机数替换ID,例如1532174166502。为了保存生成的项目,您必须提交表单 提交表单时,我会通过参数搜索ID为空的菜单项并创建它们。在那之后,我更新了所有其他内容 Rails无法正确更

更新后,解决方案是: 参数['place']['menu\u items\u attributes']。拒绝!{| uv| v['id']是否为空?}

问题-我想从参数中排除某些项,但不知道如何排除

背景。一个地方有很多菜单项。在编辑页面上,您可以使用javascript添加新项目:我克隆第一个现有节点并用随机数替换ID,例如1532174166502。为了保存生成的项目,您必须提交表单

提交表单时,我会通过参数搜索ID为空的菜单项并创建它们。在那之后,我更新了所有其他内容

Rails无法正确更新所有内容,因为我在params中手工制作的菜单项没有ID,显然是空白的。我想排除那些新创建的菜单项

before_action :find_place, only: [:show, :edit, :update, :destroy]
before_action :add_menu_items, only: [:update]

# PATCH/PUT /admin/places/:id
def update
  if @place.update(place_params)
    render json: {}, status: :ok
  else
    render json: {}, status: :internal_server_error
  end
end

# The error
# ActiveRecord::RecordNotFound (Couldn't find Product with ID=1 for MenuItem with ID=)

# Params
# {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"rOgxn...uitQ==", "place"=>{"menu_items_attributes"=>{"0"=>{"product_attributes"=>{"id"=>"7"}, "price"=>"23", "_destroy"=>"0", "id"=>"30"}, "1532174157580"=>{"product_attributes"=>{"id"=>"3"}, "price"=>"999", "_destroy"=>"false", "id"=>""}, "1"=>{"product_attributes"=>{"id"=>"11"}, "price"=>"10", "_destroy"=>"0", "id"=>"31"}, "1532174166502"=>{"product_attributes"=>{"id"=>"10"}, "price"=>"666", "_destroy"=>"false", "id"=>""}}}, "menu_item_type"=>"foods", "menu_item_category"=>"desert", "menu_item_product"=>"10", "reset"=>"Reset", "commit"=>"Save", "controller"=>"admin/places", "action"=>"update", "id"=>"7"}
我曾尝试使用在文档中找到的.reject遍历参数,但没有成功。我缺少什么?

现有菜单项:

params["place"]["menu_items_attributes"].select {|k, v| !v["id"].empty? }
params["place"]["menu_items_attributes"].select {|k, v| v["id"].empty? }
新菜单项:

params["place"]["menu_items_attributes"].select {|k, v| !v["id"].empty? }
params["place"]["menu_items_attributes"].select {|k, v| v["id"].empty? }
我不知道你的情况,也许你想要这个:

ActiveRecord::Base.transaction do
  params["place"]["menu_items_attributes"].select {|k, v| v["id"].empty? }.values.each do |menu_item_param|
    MenuItem.create!(menu_item_param)
  end
end

在@place.update之前,place\u params的值是多少?谢谢,我不知道为什么我没有尝试params['place']['menu\u items\u attributes']。拒绝!{|,v | v['id'].空?}之前-它解决了我的问题!您是如何使用ActiveRecord::Base.transaction的?这是为了确保每个菜单项记录都已成功创建,否则这些记录将从数据库中删除,您可以要求客户修复错误