سؤال

في هذا الفيديو (10 ثانية) يمكنك أن ترى أن السمة المتداخلة يتم تحديثها فقط إذا تم تغيير نموذج الوالدين.

باستخدام Rails 3.0.0.beta و المشروع الكامل على جيثب.

ملخص النماذج والشكل:

class Project < ActiveRecord::Base
  has_many :tasks
  accepts_nested_attributes_for :tasks
end

class Task < ActiveRecord::Base
  belongs_to :project
  has_many :assignments
  accepts_nested_attributes_for :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :task
end


form_for(@project) do |f|

  Project: f.text_field :name

  f.fields_for :tasks do |task_form|
    Task: task_form.text_field :name

    task_form.fields_for :assignments do |assignment_form|
      Assignment: assignment_form.text_field :name
    end
  end

  f.submit
end
هل كانت مفيدة؟

المحلول

EDIT2: نفس الرمز يعمل بشكل مثالي في Rails 2.3.5. يبدو أنه خطأ في إصدار بيتا.

تعديل: كتبت اختبارًا في تطبيقي لمحاكاة هذا. ها هي النتيجة.

  test "should update empresa" do
    addr = empresas(:ufba).address
    put_with users(:s_one), :update, :id => empresas(:ufba).to_param,
             :empresa => { :address_attributes => {:id => empresas(:ufba).address.to_param,
                                                   :city => "Feira de Santana"}}
    assert_not_nil assigns(:empresa)
    assert_not_same addr, assigns(:empresa).address, "Endereco nao foi atualizado"
    assert_redirected_to empresa_path(assigns(:empresa))
  end

يعمل بدون أخطاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top