Simple and elegant checkboxes with has_many through impossible ?

Hi,

Im currently developing simple website to manage some sort of product. Every product has its own product_categories, so these are related with has_many :through association. product has many product categories. im not using habtm, i prefer has_many through and i can't change it, so habtm is out of scope. quite simple isn't it ?

Ok, so i tried to make a CRUD for it, you know simple thing like: name for a product, and list of checkboxes for product categories. when i check some of checboxes, the categories are assigned to my product, at least one category checkbox has to be checked (validation), nothing special.

I came up with this (based on some articles from this forum): http://pastie.caboo.se/131841

The whole project is available to download and run on google code: http://glodomor.googlecode.com/svn/trunk/

Feel free to post code patches through issue tracker if you want to. http://code.google.com/p/glodomor/issues/list

The code above comes from this forum and i feel it's rails hacking a little bit, and it doesn't work as it should, here's why:

Here are my really serious problems:

1. Checkboxes dont remember their state when validation fails. For example, when i check two of them, and hit submit (leaving name textfield empty which causes validation to fail) i get the view again, but checkboxes i checked are reset to the initial state. really frustrating.

2. My unit tests for Product model does not pass. Why ? Because im doing validation through custom validate method, which checks product_category_ids attribute (this is attribute generated by rails automaticaly right ? ) which is simply view related, not model. so when i create in my test Product and assign category to it, it fails because im assigning product_category to my product, not product_category_ids...

Question is simple, how do i do has_many with checkboxes so that works like any other simple field of my model like name where it remember state between postbacks and does all validations i want (validates_presence_of) ?

Best regards