我正在使用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的新手,所以请保持温柔。 :)
答案 0 :(得分:1)
要回答你的问题,嵌套模型应该是这样的:
params = {
:entry => {
:approaches_attributes => [
{:approach_one_attr => ...},
{:approach_two_attr => ...}
]
}
}
在我看来,这里的问题是你视图中的表单而不是控制器。