HashWithIndifferentAccess в связанных моделях - PullRequest
0 голосов
/ 10 мая 2011

У меня есть приложение 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"}}

Ответы [ 2 ]

1 голос
/ 10 мая 2011

оказалось, что это была проблема с тем, как 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 голосов
/ 08 июня 2012

Вы должны использовать:: 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

end

...