0

我是rails新手,如果有一个简单的答案,请原谅我。我正在尝试为 rails 中的表格实现“字母索引”。我希望能够单击一个字母并刷新表格 - 仅包含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 %>

这里的想法是在单击字母时运行一个辅助函数。但这是我卡住的地方。


更新:

好的,感谢下面的评论,我能够弄清楚。如果其他人想知道,这就是它的完成方式。

控制器

# 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 %>
4

1 回答 1

0

使用它来获取特定字母的结果列表:

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

那么在你看来:

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

    <%= link_to visitor(visitor) %>

<% end %>

语法可能略有偏差,但基本思想就在那里。

我不完全确定最后一行是什么意思......

于 2011-08-04T17:19:38.970 回答