2011-08-04 4 views
0

簡単な答えがあれば私には新しいので、私に許してください。私はレールのテーブルのための "アルファベットインデックス"を実装しようとしています。私は、文字をクリックして、テーブルをリフレッシュすることができるようにしたい - 最後の列の最初の文字がクリックされた文字と一致するデータのみを含む。テーブルのためのアルファベットフィルター

私が最初に考えたのは、このコードは私の最初の文字のそれぞれの一つを有する配列を与えるデータベース

@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 

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

それだけで始まるので、上記の文の句は、 ''「?%」のようなlast_nameのように改善することができるザ・レターは、R​​ailsのバージョンが通常のSQLのように動作することを前提としています。 – Karl

+0

さて、ちょっと微調整した後、このコード行が機能します。 ( "last_name like?"、letter + "%") ' ただし、リンク部分が機能していません。私は、文字がクリックされるまでテーブルをフィルタリングしたくないのですが、そのコードをコントローラに置くと、テーブルがフィルタされてロードされます。私はヘルパーメソッドに入れてみましたが、何もしないようです。 –

+0

はい、あなたはリクエストに手紙を受け取らなければ、@visitors = Visitor.order( "last_name ASC")を実行し、その場所を離れると思います。 – jaydel

関連する問題