HABTM checkboxes insert but don't delete


#1

I have a problem related with the HABTM relationships with checkboxes.

I’ve got a profile and a service model, both related with
has_and_belongs_to_many.

The problem is that i can insert new data in the profiles_services
table, however, i cant delete already existing data.

What could be the problem?


#2

have you watched…

http://railscasts.com/episodes/17-habtm-checkboxes


#3

On Dec 9, 12:10 pm, tecregio removed_email_address@domain.invalid wrote:

I have a problem related with the HABTM relationships with checkboxes.

I’ve got a profile and a service model, both related with
has_and_belongs_to_many.

The problem is that i can insert new data in the profiles_services
table, however, i cant delete already existing data.

What could be the problem?

Try putting this ProfilesController#update , before #update_attributes
is called:
params[:profile][:service_ids] ||= []

And put this in ServicesController#update , before #update_attributes
is called:
params[:service][:profile_ids] || = []

These are needed because forms don’t submit values for unticked
checkboxes. If you watch the “HABTM Checkboxes” RailsCast, you’ll
learn more about this:
http://railscasts.com/episodes/17-habtm-checkboxes

Cheers,
Nick


#4

hehe silly me, i should have shown you the entire code, i had a
service= definition that was conflicting with the deletion =p


#5

yes, i think i’m following exactly the tutorial, however it doesn’t
work…

here’s the code:

#profile model:

class Profile < ActiveRecord::Base
belongs_to :company
has_and_belongs_to_many :services
[…]
end

#service model:

class Service < ActiveRecord::Base
has_and_belongs_to_many :profiles

validates_presence_of :name

end

#profile_controller

def update
params[:profile][:service_ids] ||= []
@profile = Profile.find(params[:id])
@total_services = Service.find(:all, :order => ‘name’)
@profile.update_attributes(params[:profile])
@company = @profile.company
redirect_to :action => ‘show’, :id => @company.id
end

#partial that displays the services (i’m calling @total_services from
the show controller)

<% for s in @total_services -%>

<% end %>

<%= check_box_tag “profile[service_ids][]”, s.id,
@profile.services.include?(s) %>

<%= s.name -%>

I’ve checked the generated log, and it creates the insert query when i
have newly checked services in my view, but it doesn’t create the
delete query when i do uncheck.