Алфавитный фильтр для таблицы в Rails - PullRequest
0 голосов
/ 04 августа 2011

Я новичок в рельсах, так что простите, если есть простой ответ. Я пытаюсь реализовать «Алфавитный указатель» для таблицы в рельсах. Я хочу иметь возможность щелкнуть букву и обновить таблицу, содержащую только данные, по которым первая буква столбца last_name соответствует букве, по которой щелкнули.

Моей первой мыслью было создание массива букв из базы данных

@visitor_array = []
@v = Visitor.all
@v.each do |visitor|
    @visitor_array << visitor.last_name[0,1]
    end
@visitor_array.sort!
@visitor_array.uniq!

Этот код дает мне массив, который имеет одну из первых букв. Я использовал это как мой «алфавит». На мой взгляд у меня есть следующий код

<% @visitor_array.each do |visitor| %>
  <%= link_to visitor, alphasort(visitor) %>
<% end %>

Смысл в том, чтобы при нажатии на букву запускать вспомогательную функцию. Но вот где я застрял.


UPDATE:

Хорошо, благодаря комментариям ниже, я смог понять это. Если кому-то еще было интересно, вот как это было сделано.

CONTROLLER

# Create array consisting of the first letter of every visitor's last name
@visitor_array = []
@v = Visitor.all
@v.each do |visitor|
    @visitor_array << visitor.last_name[0,1]
    end
#Sort array alphabetically in ASC order
@visitor_array.sort!
#Remove duplicate elements
@visitor_array.uniq!


if (params[:letter] != nil)
@visitors = Visitor.order("last_name ASC").where("last_name like ?", params[:letter] +"%" )
else
@visitors = Visitor.order("last_name ASC")
end

ВИД

<% @visitor_array.each do |letter| %>
  <%= link_to letter, :controller => "visitors" , :letter => letter %>
<% end %>

1 Ответ

0 голосов
/ 04 августа 2011

Используйте это, чтобы получить список результатов для конкретной буквы:

visitors = Visitor.order("last_name ASC").where("last_name like '?'", letter)

Тогда, на ваш взгляд:

<% @visitor_array.each do |visitor| %>

    <%= link_to visitor(visitor) %>

<% end %>

Синтаксис может быть немного не в порядке, но основная идея состоит в том, чтотам.

Я не совсем уверен, что вы подразумеваете под последней строкой ...

...