我有一个 rails 2.3 应用程序,我在其中定义了这样的路线:
map.connect ':controller/:level1/:level2', :action => 'index'
map.connect ':controller/:level1', :action => 'index'
我想根据我所在的页面制作一些像面包屑一样的链接。例如,假设我的控制器名称是'contr'
,如果我的路径是/contr
,则只有一个链接:'/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 次。这里可能是什么问题?
我什至试图让b_links
数组包含从该url_for
方法返回的字符串,但没有成功。