In Rails, how should I implement a Status field for a Tasks app - integer or enum?
Posted
by Doug
on Stack Overflow
See other posts from Stack Overflow
or by Doug
Published on 2010-04-16T05:49:37Z
Indexed on
2010/04/16
5:53 UTC
Read the original article
Hit count: 355
For a Rails 3.0 Todo app, I have a Tasks model with a Status field. What's the best way to store the Status field data (field type) and still display a human-readable version in a view (HTML table)? Status can be:
0 = Normal
1 = Active
2 = Completed
Right now I have this:
Rails Schema Here:
create_table "tasks", :force => true do |t|
t.integer "status", :limit => 1, :default => 0, :null => false
Rails Model Here:
class Task < ActiveRecord::Base
validates_inclusion_of :status, :in => 0..2,
:message => "{{value}} must be 0, 1, or 2"
Rails View Here:
<h1>Listing tasks</h1>
<table>
<tr>
<th>Status</th>
<th>Name</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @tasks.each do |task| %>
<tr>
<td><%= task.status %></td>
<td><%= task.name %></td>
<td><%= link_to 'Show', task %></td>
<td><%= link_to 'Edit', edit_task_path(task) %></td>
<td><%= link_to 'Delete', task, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
Requirements
Store a Task's status in the db such that the values are easily localizable, i.e. I'm not sure I want to store "normal", "active", "completed" as a string field.
Solution must work with Rails 3.0.
Questions:
Should I store the field as an integer (see above)? If so, how do I display the correct human readable status in an HTML table in my Rails view, e.g. show "Active" instead of "1" in the HTML table.
Should I use an enum? If so, is this easy to localize later?
Should I use straight strings, e.g. "Normal", "Active", "Completed"
Can you provide a quick code sample of the view helper, controller or view code to make this work?
© Stack Overflow or respective owner