2011-08-04 120 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