【问题标题】:Modifying the behavior of link_to in a Redmine installation (ruby on rails)在 Redmine 安装中修改 link_to 的行为(ruby on rails)
【发布时间】:2026-02-21 18:45:01
【问题描述】:

我正在尝试修改 Redmine 安装的 UI(Redmine 0.7.3.devel.2093 (MySQL))。

当您在 Redmine 中查看项目时,它会生成该项目的所有子项目的列表。

例如 app/views/projects/index.rhtml 调用 link_to 函数:

<% if @project_tree[project].any? %>
    <p><%= l(:label_subproject_plural) %>:
    <%= @project_tree[project].sort.collect {|subproject| 
       link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "subp fav" : "subp"))}.join(', ') %></p>
<% end %>

输出以下 HTML:

<p>Subprojects:
<a href="/projects/show/foo" class="subp fav">Foo Subproject</a>, <a href="/projects/show/bar" class="subp">Bar Subproject</a>, <a href="/projects/show/baz" class="subp fav">Baz Subproject</a></p>

我们发现以逗号分隔的子项目列表很难直观地解析。我们希望将每个子项目列在自己的行上。 (任何标记都可以——每个链接上的 UL、OL 或 P 标记都是理想的,但是用 BR 代替逗号就完全可以了。)

进行此更改的最佳方法是什么?我找不到 link_to 在应用中定义的位置; grepping def link_to( 和类似的结果一无所获。我是一个 UI 类型,所以我真的不明白 Rails 是如何处理这些东西的——它似乎没有在视图模板中定义。

【问题讨论】:

    标签: ruby-on-rails redmine


    【解决方案1】:

    您可以直接在您提供的代码中执行此操作。换个方式

    join(', ')
    

    join('<br />')
    

    应该可以的。

    【讨论】:

      【解决方案2】:

      link_to 由 Rails 框架提供 - 它不会将链接生成为列表 - 它只是创建单个链接。问题在于 sort.collect 和生成对 link_to 的调用的块

      这应该可以,将子项目放入列表项中

      <% @project_tree[project].sort.collect do |subproject| %>
        <li>        
          <%= link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "subp fav" : "subp")) %>
        </li>
      <% end %> 
      

      【讨论】:

        【解决方案3】:

        我想指出,最新版本的 Redmine trunk 将项目列表更改为使用 HTML 列表(ul 和 li)。

        【讨论】: