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"}}


person pedalpete    schedule 09.05.2011    source източник
comment
не използвате правилно вложения модел. Опитахте ли да направите f.fields_for :description_maps?   -  person apneadiving    schedule 10.05.2011
comment
Използвам formtastic, така че е semantic_fields_for, това е правилно.   -  person pedalpete    schedule 10.05.2011
comment
Ами добре... И f.semantic_field_for или нещо подобно? Трябва да вложите формата си...   -  person apneadiving    schedule 10.05.2011


Отговори (2)


Оказа се, че това е проблем с начина, по който 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

Надяваме се, че този отговор ще помогне на някой друг, който има същия проблем.

person pedalpete    schedule 10.05.2011
comment
златен! Аз съм на rails 3.0.x, не използвам formtastic. Използвам квадратчета за отметка в масив от вложени формуляри. Трябва сам да създам формуляра, като използвам check_box_tag вместо form_helper/fields_for.check_box, защото rails не обработва добре масива с квадратчета за отметка. Блъскаше се, докато, бъзик!, добави „_attributes“ във вложеното име на attr. Намерих толкова много сложни отговори около този въпрос, когато правилният отговор, така или иначе в моя случай, е толкова прост (и има смисъл, след като щракне). Благодаря! - person pduey; 15.10.2011

Трябва да използвате: :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

край

person Victor Hazbun Anuff    schedule 08.06.2012