控制器在嵌套模型的属性上扼流圈

时间:2013-12-10 00:43:13

标签: ruby-on-rails ruby-on-rails-4 nested-forms nested-attributes

我正在使用Rails 4 + Ruby 2

Rails中的嵌套模型是一个巨大的痛苦。在那里,我说了。

好的,所以我的entry模型嵌套了approaches

# --- entry.rb ---
has_many :approaches, :dependent => :destroy
  accepts_nested_attributes_for :approaches, :reject_if => lambda { |a| a[:approach_type].blank? }, :allow_destroy => true

接近参数会转到控制器的create方法,如下所示(来自日志):

{"utf8"=>"✓", 
"entry"=>{
  "aircraft_registration"=>"N384HA", 
  "flight_date"=>"2013-12-10", 
  "departure"=>"KSAD", 
  ...

  "approaches"=>{
    "1386633324306"=>{
      "approach_type"=>"GLS", 
      "holding"=>"false", 
      "quantity"=>"2", 
      "airport"=>"FFS", 
      "runway"=>"12L", 
      "updated_flag"=>"true"
    }, 
    "1386633813852"=>{
      "approach_type"=>"TACAN", 
      "holding"=>"false", 
      "quantity"=>"1", 
      "airport"=>"DFD", 
      "runway"=>"12L", 
      "updated_flag"=>"true"
    }
  },  
}

出于测试目的,我做了一揽子补贴:

params.require(:entry).permit!

......我从撒旦本人那里得到了这个错误:

ActiveRecord::AssociationTypeMismatch - Approach(#70114475640640) expected, 
got Array(#70114477494560)

似乎问题是Entry模型不喜欢这些方法是一个数组(实际上看起来像一个带有id号的哈希,但我知道的是什么)。

我的问题

当嵌套模型从视图到控制器时,它们应该如何看待嵌套模型?

我正在尝试缩小是否存在来自我的表单的错误格式化数据,或者我的控制器中是否存在问题。

我是Rails的新手,所以请保持温柔。 :)

1 个答案:

答案 0 :(得分:1)

要回答你的问题,嵌套模型应该是这样的:

params = {
  :entry => {
    :approaches_attributes => [
      {:approach_one_attr => ...}, 
      {:approach_two_attr => ...}
    ]
  }
}

在我看来,这里的问题是你视图中的表单而不是控制器。