Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 两级嵌套属性和强参数_Ruby On Rails_Ruby On Rails 4_Strong Parameters - Fatal编程技术网

Ruby on rails 两级嵌套属性和强参数

Ruby on rails 两级嵌套属性和强参数,ruby-on-rails,ruby-on-rails-4,strong-parameters,Ruby On Rails,Ruby On Rails 4,Strong Parameters,我已经将一个Rails应用程序从Rails 3移植到Rails 4,现在大部分功能都正常工作了,除了两级嵌套属性的问题: 我有产品组、变体和价格 每个ProductGroup都有一个或多个变体。其中之一是主变体 每个变体都有许多价格(每个区域一个) 我有一个更新ProductGroups的控制器。更新ProductGroup时,同时更新主变量。主变型中的价格也会更新 下面是一个测试,描述了预期会发生什么: test "should update master variant" do

我已经将一个Rails应用程序从Rails 3移植到Rails 4,现在大部分功能都正常工作了,除了两级嵌套属性的问题:

  • 我有产品组、变体和价格
  • 每个ProductGroup都有一个或多个变体。其中之一是主变体
  • 每个变体都有许多价格(每个区域一个)
我有一个更新ProductGroups的控制器。更新ProductGroup时,同时更新主变量。主变型中的价格也会更新

下面是一个测试,描述了预期会发生什么:

test "should update master variant" do
    login_as accounts(:johnny_admin)

    p = ProductGroup.find product_groups(:toothbrush).id
    assert_equal "10123", p.artno
    assert_equal "10123", p.master_variant.artno

    puts(p.master_variant.prices.to_a.to_s)

    post :update,
         id: product_groups(:toothbrush),
         p: 'setup',
         product_group: {
           master_variant_attributes: {
             artno: "20222",
             supplier_artno: "1010",
             prices_attributes: { "0": { price: "55", id: prices(:toothbrush_price_se).id } }
           }
         }

  assert_response :redirect
  assert_redirected_to edit_admin_product_group_path(p, :p => 'setup')

  p = ProductGroup.find product_groups(:toothbrush).id
  assert_equal "20222", p.artno
  assert_equal "20222", p.master_variant.artno
  assert_equal "1010", p.master_variant.supplier_artno

  price = Prices.find prices(:toothbrush_price_se).id
  assert_equal 55, price.price
end
但它失败了,出现了以下错误:

# Running:

.......[#<Price id: 510149407, variant_id: 630858089, region_id: 102782309, price: #<BigDecimal:55d2732f50a8,'0.95E2',9(18)>, created_at: "2016-12-30 11:14:28", updated_at: "2016-12-30 11:14:28">, #<Price id: 524805804, variant_id: 630858089, region_id: 960235695, price: #<BigDecimal:55d27339c510,'0.1E2',9(18)>, created_at: "2016-12-30 11:14:28", updated_at: "2016-12-30 11:14:28">]
E

Finished in 1.279989s, 6.2501 runs/s, 20.3127 assertions/s.

  1) Error:
Admin::ProductGroupsControllerTest#test_should_update_master_variant:
ActiveRecord::RecordNotFound: Couldn't find Price with ID=510149407 for Variant with ID=
    app/controllers/admin/product_groups_controller.rb:150:in `update'
    test/functional/admin/product_groups_controller_test.rb:103:in `block in <class:ProductGroupsControllerTest>'
以下是ProductGroup与主变量的关系:

  has_one :master_variant,
          -> { where(is_master: true, deleted_at: nil) },
          :class_name => "Variant",
          :foreign_key => 'product_group_id',
          :dependent => :destroy,
          :autosave => true
  accepts_nested_attributes_for :master_variant
以下是变量与价格的关系:

  has_many :prices, -> { order('region_id') }, :dependent => :destroy
  accepts_nested_attributes_for :prices
如果代码中的任何其他摘录对我有帮助的话,我很乐意发布,但我不确定现在有什么感兴趣

任何提示都将不胜感激

  has_many :prices, -> { order('region_id') }, :dependent => :destroy
  accepts_nested_attributes_for :prices