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.