Rails Forms - Basic Errors
This is going to be short because I’ve been crazy busy, but nothing really worth blogging about. Two things about forms in Rails:
1) You can’t nest them within a table. Let’s say you have this bit of code in your ERB:
<tr> <%= form_for TestClass.new do |f| %> <td> <%= f.text_field :test_field %> </td> <td> <%= f.submit 'Create' %> </td> <% end %> </tr>
What this results in is this:
<tr> <form action='/test_class'></form> <td> <input name='test_class[test_field]' type='text'> </td> <td> <input value='Create' type='submit'> </td> </tr>
The form ends up closing before it actually ends, which means that it won’t actually submit properly. Bizarrely enough, sometimes it works… but it won’t work consistently. Lesson: don’t nest forms in tables. Haven’t tried it, but there’s a possibility that with HTML5, if you define the form outside of the <table>h; element, then it will work.
2) You cannot instantiate a form in one div and then end it in another. This may seem obvious, but I see this a lot, especially with juniors. Example:
<div> <%= form_for TestClass.new do |f| %> <%= f.text_field :test_field %> </div> <div> <%= f.text_field :num_ponies %> <%= f.submit 'Create' %> <% end %> </div>
Results in this:
<div> <form action='/test_class'></form> <input name='test_class[test_field]' type='text'> </div> <div> <input name='test_class[num_ponies]' type='text'> <input value='Create' type='submit'> </div>
No bueno. Never nest anything across multiple elements. HTML does not appreciate it.