link_to函数无法正确显示数组中的链接

时间:2012-11-19 13:51:53

标签: ruby-on-rails link-to

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

1 个答案:

答案 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"}]

希望这有帮助。