HashWithIndifferentAccess в связанных моделях

У меня есть приложение rails, в котором я связываю поля в двух базах данных. Все в порядке с базой данных.

Однако у меня есть одна форма, в которой я сопоставляю описание из удаленной базы данных продукту в локальной базе данных.

Форма, используемая для создания продукта и выбора описания, работает нормально

#_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
Золотой! Я на рельсах 3.0.x, не использую formtastic. Я использую флажки в массиве вложенных форм. Мне нужно создать форму самостоятельно, используя check_box_tag вместо form_helper / fields_for.check_box, потому что rails плохо обрабатывают массив флажков. Бродил, пока, ding !, не добавил _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