Ruby on Rails Monday, May 30, 2011


On May 30, 2011, at 6:27 PM, David Kahn wrote:

<div class="ui-field-contain ui-body ui-br" data-role="fieldcontain">
<fieldset class="ui-corner-all ui-controlgroup ui-controlgroup-vertical" data-role="controlgroup">
<div class="ui-checkbox">
    <input id="foo_bar_ids_" type="checkbox" value="19" name="link[bar_ids][]" checked="checked">
</div>
     <label for="19">Jquery</label>
<div class="ui-checkbox">
   <input id="foo_bar_ids_" type="checkbox" value="25" name="foo[bar_ids][]" checked="checked">
</div>
    <label for="25">Web</label>
</fieldset>
</div>


David,

I think I see your problem. The for attribute of the label tag has to match the id attribute of the input checkbox. You have two input checkboxes with ids of "foo_bar_ids_" -- that's not really allowed by HTML, you should make that be "foo_bar_ids_19" and "foo_bar_ids_25"

The for of the label tag should match the id of the input tag -- this is actually how HTML works and has nothing to do with rails (see http://www.w3schools.com/tags/tag_label.asp). I always thought that was counter intuitive myself but that's how it works. 

To do that, you specify :id => in the check_box_tag and also :for => label_tag (you happen to not be using label_tag, but if you were you could specify :id => )

Personally I never use HABTM, because I always find I'm going to eventually want to add a field to the join table which you can't do with HABTM. Use has_many :through => instead of HABTM. (but that is actually irrelevant to the problme you have)

-Jason

No comments:

Post a Comment