Has_and_belongs_to_many with checkboxes

Hello all,

I’m trying to get my head round HABTM, and need to build a checkbox
list. I have the following models

class Supplier < User

has_one :supplier_profile, :dependent => :destroy
has_one :profile, :foreign_key => ‘user_id’, :dependent => :destroy

end

class SupplierProfile < ActiveRecord::Base
belongs_to :supplier
has_and_belongs_to_many :supplier_categories
end

class SupplierCategory < ActiveRecord::Base
has_and_belongs_to_many :supplier_profiles
end

and I have my link table: supplier_categories_supplier_profiles

I have a controller, suppliers_controller, a snippet of which looks like

def new
@supplier = Supplier.new
@supplier_profile = @supplier.supplier_profile =
SupplierProfile.new
@supplier_categories = SupplierCategory.find(:all)
end

def create
@supplier = Supplier.new(params[:supplier])
@supplier_profile = @supplier.supplier_profile =
SupplierProfile.new(params[:supplier_profile])

 if @supplier.save
   # flash[:notice] = 'Link was successfully created.'
   # redirect_to :action => 'list'
   render :text => "saved"
 else
   # render :action => 'new'
   render :text => "not saved"
 end

end

and the checkbox area of my form looks like

Category
<% for category in @supplier_categories %>

<%= check_box_tag('supplier_profile[supplier_category_ids][]', category.id) %> <%= category.name %>

<% end %>

Basically it’s not saving and I’m not entirely sure why not. If I
remove the supplier from the new and create methods then it will save
the supplier_profile with any checked checkboxes but something isn’t
quite right with the supplier.

Any ideas?

Alastair


Alastair M.
Standards compliant web development with Ruby On Rails, PHP and ASP
www.kozmo.co.uk
07738 399038

I was having a problem running a test using a fixture called receives.
The
error was class “Receife” not found. Being new at this it took me a
while
to figure out that I needed an inflection rule, because receives was
being
inflected to receife and then classify camelcased it into Receife.

“receives”.singularize => “receife”
“receives”.classify => “Receife”

I suspect the two rules responsible for this are:

C:\ruby\lib\ruby\gems\1.8\gems\activesupport-1.3.1\lib\active_support\inflections.rb

inflect.plural(/(?:([^f])fe|([lr])f)$/i, ‘\1\2ves’)

inflect.singular(/([^f])ves$/i, ‘\1fe’)

In my environment.rb, I tried creating a simple plural and singular
rule,
but they didn’t make any difference. I ended up creating an irregular
rule, which worked fine. (Probably a DRYer solution anyway) but I’m not
sure why the rules didn’t work.

Inflector.inflections do |inflect|

inflect.plural ‘/^(receive)$/i’, ‘\1s’

inflect.singular ‘/^(receive)s/i’, ‘\1’

inflect.irregular ‘receive’, ‘receives’
end

Anyway, I hope this helps you avoid some unnecessary head scratching!

Regards,
Dave Dumaresq


Information and Educational Technology
Kwantlen University College
“So powerful is the light of unity that it can illuminate the whole
earth.” --Bahá'u’lláh