我有一个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
方法返回的字符串,但没有成功。
答案 0 :(得分: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"}]
希望这有帮助。