0

科目が多い先生プロフィールモデル(別モデル)があります。プロファイルを作成/編集するために、同じフォームのプロファイルにサブジェクトを追加したいと思います。私はaccepts_nested_attributesを使用していますが、これは作成に問題なく機能します。ただし、編集ページで非常に奇妙なエラーが発生します。3つのサブジェクトが表示される代わりに(作成時に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、inherited_resources

私はこれまでバグにそれほど苦労したことはありませんでした-私はすでにそれで約8時間を失いました。本当に助けていただければ幸いです!

勇気あるテイカーに感謝します

ジャック

4

1 に答える 1

1

編集フォームの問題であることが判明しました。ネストされたフィールドブロックを、rubyを評価するのではなく、挿入されたrubyとして(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"]

于 2010-04-19T19:04:45.883 に答える