minitest - During testing in Rails 3, updating a record causes related records to be deleted -


i'm running tests using minitest in rails 3. have requirements model , ind_requirements model serves intersection between industries model , requirements model. have dependent :destroy set on has_many on requirements model, removing doesn't seem have impact on i'm seeing.

this controller testing, i'm not interacting ui or suspect reported here: active record update_attribute executes delete query on associated object(child) of object(parent) when parent updated

when @requirement.update_attributes hit, following output in log:

processing requirementscontroller#update html parameters: {"requirement"=>{"reqtext"=>"second version", "reqtitle"=>"second version"}, "id"=>"1"} user load (0.1ms)  select "users".* "users" "users"."id" = ? limit 1  [["id", 1]] sql (0.1ms)  select "requirements"."id" t0_r0, "requirements"."reqtitle" t0_r1, "requirements"."reqtext" t0_r2, "requirements"."created_at" t0_r3, "requirements"."updated_at" t0_r4, "requirements"."category_id" t0_r5, "requirements"."status" t0_r6, "requirements"."source_id" t0_r7, "requirements"."sortorder" t0_r8, "requirements"."version" t0_r9, "requirements"."active" t0_r10, "categories"."id" t1_r0, "categories"."catname" t1_r1, "categories"."created_at" t1_r2, "categories"."updated_at" t1_r3, "categories"."catabbr" t1_r4 "requirements" left outer join "categories" on "categories"."id" = "requirements"."category_id" "requirements"."active" = 't' , "requirements"."id" = ? order categories.catname limit 1  [["id", "1"]]  (0.2ms)  select count(*) "roles" inner join "role_assignments" on "roles"."id" = "role_assignments"."role_id" "role_assignments"."user_id" = 1 , (rolename = 'editor')  (0.2ms)  select count(*) "roles" inner join "role_assignments" on "roles"."id" = "role_assignments"."role_id" "role_assignments"."user_id" = 1 , (rolename = 'administrator')  (0.2ms)  savepoint active_record_1  industry load (0.2ms)  select "industries".* "industries" inner join "ind_requirements" on "industries"."id" = "ind_requirements"."industry_id" "ind_requirements"."requirement_id" = 1 order indname sql (0.2ms)  delete "ind_requirements" "ind_requirements"."requirement_id" = 1 , "ind_requirements"."industry_id" = 2 sql (0.5ms)  insert "requirement_versions" ("category_id", "created_at", "reqtext", "reqtitle", "req_id", "status", "updated_at", "version") values (?, ?, ?, ?, ?, ?, ?, ?)  [["category_id", nil], ["created_at", wed, 12 mar 2014 06:00:13 utc +00:00], ["reqtext", "this test general requirement purpose of, um, testing things"], ["reqtitle", "test requirement 19"], ["req_id", 1], ["status", "public"], ["updated_at", wed, 12 mar 2014 06:00:13 utc +00:00], ["version", 1]]  (0.1ms)  update "requirements" set "reqtext" = 'second version', "reqtitle" = 'second version', "version" = 2, "updated_at" = '2014-03-12 06:00:13.418730' "requirements"."id" = 1  (0.1ms)  release savepoint active_record_1 

note delete from. breaks test once these records deleted test database, subsequent code doesn't work properly. delete not triggered when running in development, in test.

is there config option i'm missing?

here requirement.rb file (without of other methods aren't part of this):

class requirement < activerecord::base  has_many :ind_requirements, dependent: :destroy has_many :requirement_versions has_many :industries, through: :ind_requirements has_many :responses belongs_to :category scope :active, where(:active => true) default_scope active.includes(:category).order('categories.catname') scope :submitted, where(:status => :submitted) scope :public, where(:status => :public)  accepts_nested_attributes_for :requirement_versions  attr_accessible :reqtext, :reqtitle, :industry_ids, :category_id, :catname, :status, :user_id, :source_id, :catabbr, :reqnumber, :sortorder, :requirement_versions_attributes 

here actual test case:

test "when requirement reverted, previous associated industry list restored" login_admin @requirement = create(:requirement)  @industry = create(:industry, indname: "first industry") @indlink = create(:ind_requirement, requirement_id: @requirement.id)  @indlink.save!  put :update, id: @requirement, requirement: { reqtext: "second version", reqtitle: "second version"}  @industry = create(:industry, indname: "second industry")  @indlink.industry_id = @industry.id  @indlink.save!  :revert, id: @requirement  @requirement = requirement.find(@requirement.id)  @indlink = @requirement.ind_requirements.first  assert_equal(@indlink.industry.indname, "first industry")    end 

the problem when sending update requirements, sending updated parameters: put :update, id: @requirement, requirement: { reqtext: "second version", reqtitle: "second version"}, not including parameters checkboxes, wasn't modifying them. unfortunately, end result industries deleted. imagine because absence of parameters interpreted not aren't being updated, rather have been deleted.


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -