1

私は次のようにルートを定義した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たが、成功しませんでした。

4

1 に答える 1

0

あなたが最も深いレベルにい:controller, :level1て、:level2すべて設定されている場合。

それを使ってパスを作成しようとすると、{:controller => "contr"}それが現在の環境に追加されます。これは非常に簡単で{:action => 'edit'}、現在のコントローラーを使用するようなものを書くことができます。

したがって、ハッシュを次のように調整する必要があります

 [{:controller=>"contr", :level1 => nil, :level2 => nil}, 
  {:level1=>"level1", :controller=>"contr", :level2 => nil}, 
  {:level1=>"level1", :level2=>"level2", :controller=>"contr"}]

お役に立てれば。

于 2012-11-19T14:13:04.270 に答える