Принимает вложенные атрибуты для - форма редактирования отображает неверное количество элементов (+! Map: ActiveSupport :: OrderedHash {}) - PullRequest
0 голосов
/ 15 апреля 2010

У меня есть модель профиля учителя, которая имеет много предметов (отдельная модель). Я хочу добавить темы в профиль в той же форме для создания / редактирования профиля. Я использую accepts_nested_attributes для, и это прекрасно работает для создания. Однако на странице редактирования я получаю очень странную ошибку - вместо того, чтобы видеть 3 предмета (я добавил три при создании, и взгляд в консоль подтверждает это), я вижу 12 предметов (!).

#Profile model

class Profile < ActiveRecord::Base    

   has_many :subjects
   accepts_nested_attributes_for :subjects  

end

#Subject Model

class Subject < ActiveRecord::Base

 belongs_to :profile

end                 

#Profile Controller (only showing deviations from normal RESTFUL setup)

def new
 @profile = Profile.new
  3.times do
  @profile.subjects.build
 end  
 end


#Here's 1 of three parts of the subject output of = debug @profile
  errors: !ruby/object:ActiveRecord::Errors 
      base: *id004
      errors: !map:ActiveSupport::OrderedHash {}

    subjects: 
    - &id001 !ruby/object:Subject 
      attributes: 
        exam: Either
        name: "7"
        created_at: 2010-04-15 10:38:13
        updated_at: 2010-04-15 10:38:13
        level: Either
        id: "31"
        profile_id: "3"
      attributes_cache: {}

 #  Note that 3 of these attributes are displayed despite me seeing 12 subjects on screen

Другая информация, если она актуальна.

Rails: 2.3.5, Ruby 1.8.7 p149, HAML, в наследственных ресурсах

У меня никогда раньше не было таких трудностей с ошибкой - я уже потерял около 8 часов. Буду очень признателен за любую помощь!

Спасибо любым смелым берутся

Jack

1 Ответ

1 голос
/ 19 апреля 2010

Оказывается, это была проблема с формой редактирования. Я случайно установил блок вложенных полей как (fields_for) как вставленный рубин вместо оцененный рубин .

Таким образом, вместо написания этого


   - form.fields_for :subjects do |ff|
    = ff.collection_select :name, Subject.all, :id, :name, :include_blank => true
    = ff.select :exam, ["Either", "Leaving Cert Only"] 
    = ff.select :level, ["Either", "Higher Level Only"]     

Я написал это:


   = form.fields_for :subjects do |ff|
    = ff.collection_select :name, Subject.all, :id, :name, :include_blank => true
    = ff.select :exam, ["Either", "Leaving Cert Only"] 
    = ff.select :level, ["Either", "Higher Level Only"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...