 <p>In the simple case where the number of tasks is limited, I would do only a single query to retrieve them, and then separate them as follows:</p> <pre><code>tasks = Task.all @draft_tasks = tasks.select { |x| x.status == 'Draft' } @approved_tasks = tasks.select { |x| x.status == 'Approved' } @closed_tasks = tasks.select { |x| x.status == 'Closed' } </code></pre> <p>Furthermore, depending on the bendability of your requirements, I would even render them in a single table with a clear visual marker what the state is (e.g. background-colour or icons). Then there would not even be a reason to separate the tasks beforehand (but I can imagine this would break your UI completely).</p> <p>None of the above is valid once the number of tasks becomes larger, and you will need to apply pagination, and you need to display three different tables (one for each state). </p> <p>In that case you will need to use the three separate queries as answered by @Ben.</p> <p>Now UI-wise, I am not sure how you can paginate over three different sets of data at once. So instead I would use a single table showing all the states, and offer the option to filter on the status. In that case at least it is clear for the user what pagination will mean.</p> <p>Just my two cents, hope this helps.</p>