2011-05-09 73 views
0

我有一個rails應用程序,我在跨兩個數據庫連接字段。數據庫的東西似乎都很好。HashWithIndifferentAccess在相關模型中

但是,我有一種形式將描述從遠程數據庫映射到本地數據庫中的產品。

形式用於創建產品並選擇說明工作正常

 
#_form.rb 
semantic_form_for @products do |f| 

    f.input :name 
    semantic_fields_for :description_maps do |description| 
    description.input :desciption_map_id, :input_html=>{:name=>"product[description_map][description_id]}, :collection => @descriptions 
    end 
end 

#product.rb 
class Product < ActiveRecord::Base 
    attr_accessible :name, :description_map_attributes, :description_map 

    has_one :description_map 

    accepts_nested_attributes_for :description_map 

當我提交表單,我得到一個錯誤

 
DescriptionMap(#...) expected, got ActiveSupport::HashWithIndifferentAccess(#othernumber) 

我似乎無法弄清楚爲什麼發生這種情況。

張貼的參數看起來不錯

 
"product"=>{"name"=>"test name", 
"description_map"=>{"description_id"=>"1"}} 

+0

你沒有使用正確的嵌套模式。你有沒有嘗試做f.fields_for:description_maps? – apneadiving 2011-05-09 22:55:59

+0

我使用formtastic,所以它是semantic_fields_for,這是正確的。 – pedalpete 2011-05-10 04:46:33

+0

那好吧......還有f.semantic_field_for或類似的東西?你必須嵌套你的表格... – apneadiving 2011-05-10 06:05:49

回答

1

原來,這是與如何formtastic命名說明地圖的問題。 在的問題,我已經指定

 
description.input :desciption_map_id, :input_html=>{:name=>"product[description_map][description_id]}, :collection => @descriptions 

,但所需要的「description_map」是「description_map_attributes」這樣

 
description.input :desciption_map_id, :input_html=>{:name=>"product[description_map_attributes][description_id]}, :collection => @descriptions 

希望這有助於回答別人有同樣的問題。

+0

黃金!我在軌道3.0.x,不使用formtastic。我在嵌套表單數組中使用複選框。我必須使用check_box_tag替代form_helper/fields_for.check_box來「自己構建」表單,因爲rails不能很好地處理複選框數組。直到,ding!,在嵌套的attr名稱中添加'_attributes'。無論如何,在我的情況下,正確的答案非常簡單(並且一旦點擊就有意義),在這個問題中發現了很多複雜的答案。謝謝! – pduey 2011-10-15 18:20:34

0

你應該使用:description_map(不帶 「S」)的原因是has_on關係

semantic_fields_for :description_map do |description| 
    description.input :desciption_map_id, :input_html=>{:name=>"product[description_map]  [description_id]}, :collection => @descriptions