2011-08-04 40 views
0

我是新来的铁轨,所以原谅我,如果有一个简单的答案。我试图为rails中的表实现“Alphabet Index”。我希望能够点击一个字母并刷新表格 - 仅包含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:

好了,这要归功于下面的评论,我能弄明白。如果有人想知道,这是如何完成的。

控制器

# 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 

VIEW

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

<%= link_to letter, :controller => "visitors" , :letter => letter %> 

<% end %> 

回答

0

使用该得到的结果的特定字母列表:

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

然后在您的视图:

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

    <%= link_to visitor(visitor) %> 

<% end %> 

语法可能稍微偏离,但基本思想在那里。

我不完全相信你的,虽然最后一行的意思......

+0

的WHERE在上面的语句子句可以提高到'姓氏LIKE“?%”',所以只用启动这封信,假定Rails版本像普通的SQL一样工作。 – Karl

+0

好的,所以经过一点调整,这行代码的作品。 “@visitors = Visitor.order(”last_name ASC“)。where(”last_name like?“,letter +”%“)但是,链接部分不起作用。我不想在表单被点击前过滤表格,但是如果我将这些代码放在控制器中,那么我的表格会被过滤。我试图把它变成一个辅助方法,但它似乎没有做任何事情。 –

+0

是的,我会假设,如果你在请求中没有收到任何信件,你只需要做@visitors = Visitor.order(“last_name ASC”)并离开那里...... – jaydel