قم بإزالة القضايا بدلا من تدمير الكائن عند: السماح_DESTROY => صحيح

StackOverflow https://stackoverflow.com/questions/1299617

سؤال

عند استخدام الجديد accepts_nested_attributes_for في activerecord، من الممكن استخدام الخيار :allow_destroy => true. وبعد عندما يتم تعيين هذا الخيار، أي تجزئة تحتوي على سمات متداخلة مثل {"_delete"=>"1", "id"=>"..."} مرت ل update_attributes سوف حذف الكائن المتداخن.

إعداد بسيط:

class Forum < ActiveRecord::Base
  has_many :users
  accepts_nested_attributes_for :users, :allow_destroy => true
end

class User < ActiveRecord::Base
  belongs_to :forum
end

Forum.first.update_attributes("users_attributes"=>{"0"=>{"_delete"=>"1", "id"=>"42"}})

سؤال: كيف أنا - بدلا من حذف الكائنات المتداخلة عندما "_delete" => "1" - فقط قم بإزالة الرابطة؟ (أي في الحالة أعلاه تعيين Forum_id على المستخدم إلى NIL)

السؤال مكافأة: ماذا لو كنت أريد أيضا تغيير السمة على الكائن المتداخل عند إزالة الارتباط؟ (على سبيل المثال، مثل تحديد حالة أو زمني)

هل كانت مفيدة؟

المحلول

بدلا من طلب حذف المستخدم باستخدام "_delete" => '1', ، هل لا يمكنك فقط تحديثه باستخدام Nested_Attributes؟:

Forum.first.update_attributes("users_attributes"=> { 
  "0" => {
    "id" => "42",
    "forum_id" => "",
    "state" => 'removed'
  }
})
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top