2012-01-15 16 views
0

私はレールとレールを使い慣れていません3.ユーザーがメニューの「A」をクリックすると、そこからのエントリが表示されるようにオンライン用語集を作成しようとしていますデータベースはすべて「A」で始まります。クリックしたリンクに基づいてモデルデータを表示

私はあなたが 'letter_A.html.erb'ファイルと 'letter_B.html.erb'ファイルなどを持つことができるような別のページを使ってこれを行うことができますが、私はそれが私は同じコードを何度も何度も繰り返さないようにしたいので同じファイルですか?

私が望むのは、ユーザーがリンク 'D'をクリックすると、別のページ 'letter.html.erb'に移動することができますが、「D」で始まる項目だけが表示されます。そして、彼らが「A」をクリックすると、再び同じページに移動しますが、「A」で始まる項目だけが表示されます。私は変数をlink_to関数に渡さなければならないと思いますが、どうやってこれを行うのかは分かりません。

ご協力いただければ幸いです。

ありがとうございます。

私はそうのように、私の記事のコントローラ内のメソッドを作成しました:

def showletter 
@posts = Post.where(:letter => "B") 
... 
end 

、それは例えば、文字Bで始まるすべてのエントリを示しています。しかし、私が思っているのは、 "B"をA..Zの間の変数に置き換えることができるように、変数をコントローラに渡すことができますか?これから私はlink_to_functionや他の何かを私のビューで使いたいと思っていました。私はまだレールが新しくなっているので、これができるかどうかはわかりません。誰もが提供できるヘルプは素晴らしいでしょう。

+0

一つの方法は、のparamsを使用することです(http://stackoverflow.com/questions/6885990/rails- params-described)。お役に立てれば。 –

+0

私はあなたがparamsを使うことができると思ったが、どうやってそれをするのか分からない。 – user1104150

答えて

1

は、あなたがこのようなルートを持っていると仮定しましょう:

<% ('a'..'z').to_a.each do |f| %-> 
    <%= link_to "#{f}", "/glossary/#{f}" %> 
<% end %> 

または

<% ('a'..'z').to_a.each do |f| %-> 
    <%= link_to "#{f}", glossary_path(:id => f) %> 
<% end %> 

get '/glossary/:id', :as => :glossary 

は今、あなたのインデックスページにあなたのようなものになり、コードを持っているつもりです

2番目が好ましいです。続きを読むhereを読んでください。そのように、あなたはレールコンソールで、あなたの名前のルートを試すことができます注意してください。これを行うには

$ rails console --sandbox 

Loading development environment in sandbox (Rails 3.1.3) 
Any modifications you make will be rolled back on exit 
ruby-1.9.3-p0 :001 > app.glossary_path(:id => 'a') 
=> "/glossary/a" 
+0

あなたの素早い応答に感謝します - 私はあなたの最初のオプションを試してみました。私はこれが私が探しているものなのかどうかはわかりません - これは 'a'という別のページにあなたを送りますか? – user1104150

+0

私がしたいのは、リンク 'a'をクリックすることです。用語集のページに移動しますが、aで始まる単語だけが表示されます。助けてくれてありがとう:) – user1104150

+0

2番目の方法は、ルートの定義方法に大きく依存しています。詳細については、「名前付きルート」を参照してください。あなたが望んでいることは、自動的には起こりません。これらのリンクはあなたをコントローラにリダイレクトし、コントローラは 'id'文字で始まるすべてのページをプルする必要があります。 – troutwine

関連する問題