Вы также должны опубликовать метод контроллера, чтобы лучше понять модель.
В любом случае, предполагая, что модель Something имеет строковый столбец «категория», вам не следует жестко задавать значения для выбора, если только эти значения не являются фиксированными, в этом случае вы можете рассмотреть возможность использования строкового столбца.
Вот быстрый пример:
# something_controller.rb
def index
@categories = Something.find_by_sql("SELECT category FROM somethings GROUP BY category").map &:category
@somethings = params[:category].blank? ? Something.all : Something.find_all_by_category(params[:category])
end
это вид:
<% form_tag(:action => :index) do %>
<%= select_tag "category", options_for_select(@categories) %>
<%= submit_tag "Filter" %>
<% end %>
<table>
<tr>
<th>foo</th>
...
</tr>
<% somethings.each do |something| %>
<tr>
<td><%= something.foo %></td>
...
</tr>
<% end %>
</table>
Обновление:
Хотя приведенный выше код работает, он действительно слишком быстро закодирован и предполагает плохую практику.
Вот лучший способ:
# app/models/Something.rb
def self.all_categories
find_by_sql("SELECT category FROM somethings GROUP BY category").map(&:category).select {|x| x}
end
def self.select(category)
if category
find_all_by_category(category)
else
find :all
end
end
#app/controllers/something_controller.rb
def index
@categories = Something.all_categories
@somethings = Something.select(params[:category])
end