私は次のようにルートを定義したrails2.3アプリケーションを持っています。
map.connect ':controller/:level1/:level2', :action => 'index'
map.connect ':controller/:level1', :action => 'index'
表示しているページに応じて、パンくずリストのようなリンクを作成したいと思います。たとえば、コントローラー名が'contr'
、パスがの場合、/contr
リンクは1つだけになるとします'/contr'
。私のパスが、である場合、'/contr/level1/level2'
3つのリンクが必要です:'/contr'
、、。'/contr/level1'
'/contr/level1/level2'
これが私が試した方法です:
私の見解では、私はこれらのレベルを検出します:
b_titles = []
b_links = []
b_titles << 'Contr'
b_links << ({:controller=>'contr'})
if !params[:level1].nil?
b_titles << 'Level 1'
b_links << ({:controller=>'contr', :level1=> params[:level1]})
if !params[:level2].nil?
b_titles << 'Level 2'
b_links << ({:controller=>'contr', :level1=> params[:level1], :level2=>params[:level2]})
end
end
これらの配列を作成した後、関数を使用してそれらをテストしますp
p b_links
p b_titles
コンソールには、望ましい結果があります。
[{:controller=>"contr"}, {:level1=>"level1", :controller=>"contr"}, {:level1=>"level1", :level2=>"level2", :controller=>"contr"}]
["Contr", "Level 1", "Level 2"]
ここで、ブレッドクラムのリンクのリストを作成します。
<% b_titles.each_with_index do |title, i| %>
<%= link_to(title, (b_links[i])) %>
<% end %>
結果は次のようになります。
<a href="/contr/level1/level2">Contr</a>
<a href="/contr/level1/level2">Level 1</a>
<a href="/contr/level1/level2">Level 2</a>
意味がない!すべてのアイテムに同じリンクがあるのはなぜですか?タイトルは大丈夫ですが、リンクは大丈夫ではありません。
リンクだけを表示しようとしてもb_links.each do |link|
、3番目のリンクは3回表示されます。ここで何が問題になる可能性がありますか?
b_links
メソッドから返された文字列を含む配列を作成しようとしましurl_for
たが、成功しませんでした。