2011-05-09 71 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