1

我有一个 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方法返回的字符串,但没有成功。

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 回答